Home Home > GIT Browse > SLE12-SP5-AZURE
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@novell.com>2009-06-10 10:32:51 +0200
committerJan Beulich <jbeulich@novell.com>2009-06-10 10:32:51 +0200
commit300683503e1e7da0b3ef623d83330146e25c0745 (patch)
tree0099b7cecfccdb517ff746df6b804f5a015487ed
parent308038c97d10c8afc3a0018d22ea659391818c94 (diff)
- Update Xen patches to 2.6.30-rc8 and c/s 898.
- Update Xen config files. - patches.xen/pci-reserve: linux/pci: reserve io/memory space for bridge. - patches.xen/xen-x86-exports: Delete.
-rw-r--r--config/i386/xen4
-rw-r--r--config/x86_64/xen4
-rw-r--r--kernel-source.changes9
-rw-r--r--patches.xen/pci-guestdev1716
-rw-r--r--patches.xen/pci-reserve250
-rw-r--r--patches.xen/xen-balloon-max-target31
-rw-r--r--patches.xen/xen-blkback-cdrom25
-rw-r--r--patches.xen/xen-configurable-guest-devices18
-rw-r--r--patches.xen/xen-ipi-per-cpu-irq34
-rw-r--r--patches.xen/xen-kconfig-compat8
-rw-r--r--patches.xen/xen-modular-blktap19
-rw-r--r--patches.xen/xen-netback-notify-multi14
-rw-r--r--patches.xen/xen-netback-nr-irqs14
-rw-r--r--patches.xen/xen-op-packet30
-rw-r--r--patches.xen/xen-virq-per-cpu-irq32
-rw-r--r--patches.xen/xen-x86-dcr-fallback18
-rw-r--r--patches.xen/xen-x86-exports23
-rw-r--r--patches.xen/xen-x86-pmd-handling32
-rw-r--r--patches.xen/xen-x86_64-note-init-p2m34
-rw-r--r--patches.xen/xen-x86_64-pgd-alloc-order44
-rw-r--r--patches.xen/xen-x86_64-pgd-pin18
-rw-r--r--patches.xen/xen3-auto-arch-i386.diff26
-rw-r--r--patches.xen/xen3-auto-arch-x86.diff58
-rw-r--r--patches.xen/xen3-auto-arch-x86_64.diff18
-rw-r--r--patches.xen/xen3-auto-common.diff301
-rw-r--r--patches.xen/xen3-auto-include-xen-interface.diff66
-rw-r--r--patches.xen/xen3-auto-xen-arch.diff315
-rw-r--r--patches.xen/xen3-auto-xen-drivers.diff3895
-rw-r--r--patches.xen/xen3-auto-xen-kconfig.diff127
-rw-r--r--patches.xen/xen3-fixup-common96
-rw-r--r--patches.xen/xen3-fixup-kconfig35
-rw-r--r--patches.xen/xen3-fixup-xen390
-rw-r--r--patches.xen/xen3-patch-2.6.1834
-rw-r--r--patches.xen/xen3-patch-2.6.19551
-rw-r--r--patches.xen/xen3-patch-2.6.20347
-rw-r--r--patches.xen/xen3-patch-2.6.21330
-rw-r--r--patches.xen/xen3-patch-2.6.22418
-rw-r--r--patches.xen/xen3-patch-2.6.23567
-rw-r--r--patches.xen/xen3-patch-2.6.24547
-rw-r--r--patches.xen/xen3-patch-2.6.25661
-rw-r--r--patches.xen/xen3-patch-2.6.26754
-rw-r--r--patches.xen/xen3-patch-2.6.27579
-rw-r--r--patches.xen/xen3-patch-2.6.28491
-rw-r--r--patches.xen/xen3-patch-2.6.29440
-rw-r--r--patches.xen/xen3-patch-2.6.30-rc4477
-rw-r--r--patches.xen/xen3-patch-2.6.30-rc6-rc729
-rw-r--r--patches.xen/xen3-patch-2.6.30-rc7-rc860
-rw-r--r--series.conf4
48 files changed, 10106 insertions, 3887 deletions
diff --git a/config/i386/xen b/config/i386/xen
index 9f1d9d9c76..b94b3946e7 100644
--- a/config/i386/xen
+++ b/config/i386/xen
@@ -381,6 +381,8 @@ CONFIG_PCI_MSI=y
CONFIG_PCI_LEGACY=y
# CONFIG_PCI_DEBUG is not set
CONFIG_PCI_GUESTDEV=y
+CONFIG_PCI_IOMULTI=y
+CONFIG_PCI_RESERVE=y
CONFIG_PCI_STUB=m
CONFIG_PCI_IOV=y
CONFIG_ISA_DMA_API=y
@@ -3818,6 +3820,8 @@ CONFIG_XEN_NETDEV_ACCEL_SFC_UTIL=m
CONFIG_XEN_BACKEND=m
CONFIG_XEN_BLKDEV_BACKEND=m
CONFIG_XEN_BLKDEV_TAP=m
+CONFIG_XEN_BLKDEV_TAP2=m
+CONFIG_XEN_BLKBACK_PAGEMAP=m
CONFIG_XEN_NETDEV_BACKEND=m
CONFIG_XEN_NETDEV_TX_SHIFT=10
# CONFIG_XEN_NETDEV_PIPELINED_TRANSMITTER is not set
diff --git a/config/x86_64/xen b/config/x86_64/xen
index c933a55505..129c4df29c 100644
--- a/config/x86_64/xen
+++ b/config/x86_64/xen
@@ -363,6 +363,8 @@ CONFIG_PCI_MSI=y
CONFIG_PCI_LEGACY=y
# CONFIG_PCI_DEBUG is not set
CONFIG_PCI_GUESTDEV=y
+CONFIG_PCI_IOMULTI=y
+CONFIG_PCI_RESERVE=y
CONFIG_PCI_STUB=m
CONFIG_PCI_IOV=y
CONFIG_ISA_DMA_API=y
@@ -3771,6 +3773,8 @@ CONFIG_XEN_NETDEV_ACCEL_SFC_UTIL=m
CONFIG_XEN_BACKEND=m
CONFIG_XEN_BLKDEV_BACKEND=m
CONFIG_XEN_BLKDEV_TAP=m
+CONFIG_XEN_BLKDEV_TAP2=m
+CONFIG_XEN_BLKBACK_PAGEMAP=m
CONFIG_XEN_NETDEV_BACKEND=m
CONFIG_XEN_NETDEV_TX_SHIFT=10
# CONFIG_XEN_NETDEV_PIPELINED_TRANSMITTER is not set
diff --git a/kernel-source.changes b/kernel-source.changes
index c7f609c671..cb1302b1fb 100644
--- a/kernel-source.changes
+++ b/kernel-source.changes
@@ -1,4 +1,13 @@
-------------------------------------------------------------------
+Wed Jun 10 10:31:34 CEST 2009 - jbeulich@novell.com
+
+- Update Xen patches to 2.6.30-rc8 and c/s 898.
+- Update Xen config files.
+- patches.xen/pci-reserve: linux/pci: reserve io/memory space
+ for bridge.
+- patches.xen/xen-x86-exports: Delete.
+
+-------------------------------------------------------------------
Tue Jun 9 17:14:45 CEST 2009 - mmarek@suse.cz
- rpm/kernel-binary.spec.in, rpm/kernel-source.spec.in,
diff --git a/patches.xen/pci-guestdev b/patches.xen/pci-guestdev
index fd5d316a01..e7c01b3c02 100644
--- a/patches.xen/pci-guestdev
+++ b/patches.xen/pci-guestdev
@@ -1,27 +1,36 @@
Subject: xen/dom0: Reserve devices for guest use
-From: http://xenbits.xensource.com/linux-2.6.18-xen.hg (tip 867:978499ee4f39)
+From: http://xenbits.xensource.com/linux-2.6.18-xen.hg (tip 898:ca12928cdafe)
Patch-mainline: obsolete
Acked-by: jbeulich@novell.com
---- head-2009-05-19.orig/Documentation/kernel-parameters.txt 2009-05-19 09:37:31.000000000 +0200
-+++ head-2009-05-19/Documentation/kernel-parameters.txt 2009-05-19 09:42:46.000000000 +0200
-@@ -785,6 +785,15 @@ and is between 256 and 4096 characters.
+--- head-2009-05-29.orig/Documentation/kernel-parameters.txt 2009-05-29 15:08:50.000000000 +0200
++++ head-2009-05-29/Documentation/kernel-parameters.txt 2009-05-29 10:58:23.000000000 +0200
+@@ -785,6 +785,24 @@ and is between 256 and 4096 characters.
gpt [EFI] Forces disk with valid GPT signature but
invalid Protective MBR to be treated as GPT.
+ guestdev= [PCI,ACPI,XEN]
+ Format: {<device path>|<sbdf>}][,{<device path>|<sbdf>}[,...]]
-+ Format of device path: <hid>[:<uid>]-<dev>.<func>[-<dev>.<func>[,...]]
-+ Format of sbdf: [<segment>:]<bus>:<dev>.<func>
++ Format of device path: <hid>[:<uid>]-<dev>.<func>[-<dev>.<func>[,...]][+iomul]
++ Format of sbdf: [<segment>:]<bus>:<dev>.<func>[+iomul]
+ Specifies PCI device for guest domain.
-+ If PCI-PCI bridge is specified, all
-+ PCI devices behind PCI-PCI bridge are
-+ reserved.
++ If PCI-PCI bridge is specified, all PCI devices
++ behind PCI-PCI bridge are reserved.
++ +iomul means that this PCI function will share
++ IO ports with other +iomul functions under same
++ switch. NOTE: if +iomul is specfied, all the functions
++ of the device will share IO ports.
++
++ guestiomuldev= [PCI,ACPI,XEN]
++ Format: [sbd][,<sbd>][,...]
++ Format of sbdf: [<segment>:]<bus>:<dev>
++ Note: function shouldn't be specified.
++ Specifies PCI device for IO port multiplexing driver.
+
gvp11= [HW,SCSI]
hashdist= [KNL,NUMA] Large hashes allocated during boot
-@@ -1982,6 +1991,10 @@ and is between 256 and 4096 characters.
+@@ -1986,6 +2004,10 @@ and is between 256 and 4096 characters.
Run specified binary instead of /init from the ramdisk,
used for early userspace startup. See initrd.
@@ -32,8 +41,8 @@ Acked-by: jbeulich@novell.com
reboot= [BUGS=X86-32,BUGS=ARM,BUGS=IA-64] Rebooting mode
Format: <reboot_mode>[,<reboot_mode2>[,...]]
See arch/*/kernel/reboot.c or arch/*/kernel/process.c
---- head-2009-05-19.orig/drivers/acpi/pci_root.c 2009-05-19 09:37:31.000000000 +0200
-+++ head-2009-05-19/drivers/acpi/pci_root.c 2009-05-19 09:42:46.000000000 +0200
+--- head-2009-05-29.orig/drivers/acpi/pci_root.c 2009-05-29 15:08:50.000000000 +0200
++++ head-2009-05-29/drivers/acpi/pci_root.c 2009-05-29 10:52:18.000000000 +0200
@@ -361,6 +361,40 @@ out:
}
EXPORT_SYMBOL(acpi_pci_osc_control_set);
@@ -126,8 +135,8 @@ Acked-by: jbeulich@novell.com
+ return FALSE;
+}
+#endif
---- head-2009-05-19.orig/drivers/acpi/scan.c 2009-05-19 09:37:31.000000000 +0200
-+++ head-2009-05-19/drivers/acpi/scan.c 2009-05-19 09:42:46.000000000 +0200
+--- head-2009-05-29.orig/drivers/acpi/scan.c 2009-05-29 15:08:50.000000000 +0200
++++ head-2009-05-29/drivers/acpi/scan.c 2009-05-29 10:52:18.000000000 +0200
@@ -191,6 +191,16 @@ acpi_device_hid_show(struct device *dev,
}
static DEVICE_ATTR(hid, 0444, acpi_device_hid_show, NULL);
@@ -159,9 +168,9 @@ Acked-by: jbeulich@novell.com
/*
* If device has _EJ0, 'eject' file is created that is used to trigger
* hot-removal function from userland.
---- head-2009-05-19.orig/drivers/pci/Kconfig 2009-05-19 09:37:31.000000000 +0200
-+++ head-2009-05-19/drivers/pci/Kconfig 2009-05-19 09:42:46.000000000 +0200
-@@ -42,6 +42,13 @@ config PCI_DEBUG
+--- head-2009-05-29.orig/drivers/pci/Kconfig 2009-05-29 15:08:50.000000000 +0200
++++ head-2009-05-29/drivers/pci/Kconfig 2009-05-29 10:55:55.000000000 +0200
+@@ -42,6 +42,20 @@ config PCI_DEBUG
When in doubt, say N.
@@ -172,24 +181,34 @@ Acked-by: jbeulich@novell.com
+ help
+ Say Y here if you want to reserve PCI device for passthrough.
+
++config PCI_IOMULTI
++ bool "PCI Device IO Multiplex for Passthrough"
++ depends on PCI && ACPI && XEN
++ default y
++ help
++ Say Y here if you need io multiplexing.
++
config PCI_STUB
tristate "PCI Stub driver"
depends on PCI
---- head-2009-05-19.orig/drivers/pci/Makefile 2009-05-19 09:37:31.000000000 +0200
-+++ head-2009-05-19/drivers/pci/Makefile 2009-05-19 09:42:46.000000000 +0200
-@@ -6,6 +6,7 @@ obj-y += access.o bus.o probe.o remove.
+--- head-2009-05-29.orig/drivers/pci/Makefile 2009-05-29 15:08:50.000000000 +0200
++++ head-2009-05-29/drivers/pci/Makefile 2009-05-29 10:54:12.000000000 +0200
+@@ -6,6 +6,8 @@ obj-y += access.o bus.o probe.o remove.
pci-driver.o search.o pci-sysfs.o rom.o setup-res.o \
irq.o
obj-$(CONFIG_PROC_FS) += proc.o
+obj-$(CONFIG_PCI_GUESTDEV) += guestdev.o
++obj-$(CONFIG_PCI_IOMULTI) += iomulti.o
# Build PCI Express stuff if needed
obj-$(CONFIG_PCIEPORTBUS) += pcie/
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/pci/guestdev.c 2009-05-19 09:42:46.000000000 +0200
-@@ -0,0 +1,783 @@
++++ head-2009-05-29/drivers/pci/guestdev.c 2009-06-09 11:17:33.000000000 +0200
+@@ -0,0 +1,887 @@
+/*
+ * Copyright (c) 2008, 2009 NEC Corporation.
++ * Copyright (c) 2009 Isaku Yamahata
++ * VA Linux Systems Japan K.K.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
@@ -228,8 +247,11 @@ Acked-by: jbeulich@novell.com
+#define GUESTDEV_FLAG_DEVICEPATH 0x1
+#define GUESTDEV_FLAG_SBDF 0x2
+
++#define GUESTDEV_OPT_IOMUL 0x1
++
+struct guestdev {
+ int flags;
++ int options;
+ struct list_head root_list;
+ union {
+ struct devicepath {
@@ -287,8 +309,7 @@ Acked-by: jbeulich@novell.com
+ if (len <= 0 || HID_LEN < len)
+ goto format_err_end;
+
-+ strncpy(hid, sp, len);
-+ hid[len] = '\0';
++ strlcpy(hid, sp, len);
+
+ if (*ep == '-') { /* no uid */
+ uid[0] = '\0';
@@ -305,8 +326,7 @@ Acked-by: jbeulich@novell.com
+ if (len <= 0 || UID_LEN < len)
+ goto format_err_end;
+
-+ strncpy(uid, sp, len);
-+ uid[len] = '\0';
++ strlcpy(uid, sp, len);
+ return TRUE;
+
+format_err_end:
@@ -464,6 +484,7 @@ Acked-by: jbeulich@novell.com
+ memset(gdev, 0, sizeof(*gdev));
+ INIT_LIST_HEAD(&gdev->root_list);
+ gdev->flags = gdev_src->flags;
++ gdev->options = gdev_src->options;
+ strcpy(gdev->u.devicepath.hid, gdev_src->u.devicepath.hid);
+ strcpy(gdev->u.devicepath.uid, gdev_src->u.devicepath.uid);
+ gdev->u.devicepath.seg = gdev_src->u.devicepath.seg;
@@ -497,7 +518,7 @@ Acked-by: jbeulich@novell.com
+}
+
+/* Make guestdev from path strings */
-+static int __init pci_make_devicepath_guestdev(char *path_str)
++static int __init pci_make_devicepath_guestdev(char *path_str, int options)
+{
+ char hid[HID_LEN + 1], uid[UID_LEN + 1];
+ char *sp, *ep;
@@ -525,6 +546,7 @@ Acked-by: jbeulich@novell.com
+ memset(gdev_org, 0, sizeof(*gdev_org));
+ INIT_LIST_HEAD(&gdev_org->root_list);
+ gdev_org->flags = GUESTDEV_FLAG_DEVICEPATH;
++ gdev_org->options = options;
+ strcpy(gdev_org->u.devicepath.hid, hid);
+ strcpy(gdev_org->u.devicepath.uid, uid);
+ gdev_org->u.devicepath.seg = INVALID_SEG;
@@ -624,7 +646,7 @@ Acked-by: jbeulich@novell.com
+ return ret_val;
+}
+
-+static int __init pci_make_sbdf_guestdev(char* str)
++static int __init pci_make_sbdf_guestdev(char* str, int options)
+{
+ struct guestdev *gdev;
+ int seg, bus, dev, func;
@@ -641,6 +663,7 @@ Acked-by: jbeulich@novell.com
+ }
+ INIT_LIST_HEAD(&gdev->root_list);
+ gdev->flags = GUESTDEV_FLAG_SBDF;
++ gdev->options = options;
+ gdev->u.sbdf.seg = seg;
+ gdev->u.sbdf.bus = bus;
+ gdev->u.sbdf.dev = dev;
@@ -649,11 +672,31 @@ Acked-by: jbeulich@novell.com
+ return 0;
+}
+
++static int __init pci_parse_options(const char *str)
++{
++ int options = 0;
++ char *ep;
++
++ while (str) {
++ str++;
++ ep = strchr(str, '+');
++ if (ep)
++ ep = '\0'; /* Chop */
++
++ if (!strcmp(str, "iomul"))
++ options |= GUESTDEV_OPT_IOMUL;
++
++ str = ep;
++ }
++ return options;
++}
++
+/* Parse guestdev parameter */
+static int __init pci_parse_guestdev(void)
+{
+ int len;
-+ char *sp, *ep;
++ char *sp, *ep, *op;
++ int options;
+ struct list_head *head;
+ struct guestdev *gdev;
+ char path_str[GUESTDEV_STR_MAX];
@@ -670,16 +713,26 @@ Acked-by: jbeulich@novell.com
+ /* Chop */
+ if (ep)
+ *ep = '\0';
-+ ret_val = pci_make_sbdf_guestdev(sp);
++ options = 0;
++ op = strchr(sp, '+');
++ if (op && (!ep || op < ep)) {
++ options = pci_parse_options(op);
++ *op = '\0'; /* Chop */
++ }
++ ret_val = pci_make_sbdf_guestdev(sp, options);
+ if (ret_val == -EINVAL) {
+ if (pci_check_extended_guestdev_format(sp)) {
-+ ret_val = pci_make_devicepath_guestdev(sp);
++ ret_val = pci_make_devicepath_guestdev(
++ sp, options);
+ if (ret_val && ret_val != -EINVAL)
+ break;
+ }
+ } else if (ret_val)
+ break;
-+ sp = ep + 1;
++
++ if (ep)
++ ep++;
++ sp = ep;
+ } while (ep);
+
+ list_for_each(head, &guestdev_list) {
@@ -699,7 +752,7 @@ Acked-by: jbeulich@novell.com
+{
+ if (strlen(str) >= COMMAND_LINE_SIZE)
+ return 0;
-+ strcpy(guestdev_param, str);
++ strlcpy(guestdev_param, str, sizeof(guestdev_param));
+ return 1;
+}
+
@@ -720,8 +773,21 @@ Acked-by: jbeulich@novell.com
+}
+
+/* Does PCI device belong to sub tree specified by guestdev with device path? */
++typedef int (*pci_node_match_t)(const struct devicepath_node *gdev_node,
++ const struct pcidev_sbdf_node *sbdf_node,
++ int options);
++
++static int pci_node_match(const struct devicepath_node *gdev_node,
++ const struct pcidev_sbdf_node *sbdf_node,
++ int options_unused)
++{
++ return (gdev_node->dev == sbdf_node->dev &&
++ gdev_node->func == sbdf_node->func);
++}
++
+static int pci_is_in_devicepath_sub_tree(struct guestdev *gdev,
-+ struct pcidev_sbdf *sbdf)
++ struct pcidev_sbdf *sbdf,
++ pci_node_match_t match)
+{
+ int seg, bbn;
+ struct devicepath_node *gdev_node;
@@ -754,8 +820,7 @@ Acked-by: jbeulich@novell.com
+ while (gdev_node) {
+ if (!sbdf_node)
+ return FALSE;
-+ if (gdev_node->dev != sbdf_node->dev ||
-+ gdev_node->func != sbdf_node->func)
++ if (!match(gdev_node, sbdf_node, gdev->options))
+ return FALSE;
+ gdev_node = gdev_node->child;
+ sbdf_node = sbdf_node->child;
@@ -804,16 +869,29 @@ Acked-by: jbeulich@novell.com
+}
+
+/* Does PCI device belong to sub tree specified by guestdev with sbdf? */
-+static int pci_is_in_sbdf_sub_tree(struct guestdev *gdev, struct pci_dev *dev)
++typedef int (*pci_sbdf_match_t)(const struct guestdev *gdev,
++ const struct pci_dev *dev);
++
++static int pci_sbdf_match(const struct guestdev *gdev,
++ const struct pci_dev *dev)
+{
+ int seg, bus;
++
++ if (sscanf(dev_name(&dev->dev), "%04x:%02x", &seg, &bus) != 2)
++ return FALSE;
++
++ return gdev->u.sbdf.seg == seg &&
++ gdev->u.sbdf.bus == bus &&
++ gdev->u.sbdf.dev == PCI_SLOT(dev->devfn) &&
++ gdev->u.sbdf.func == PCI_FUNC(dev->devfn);
++}
++
++static int pci_is_in_sbdf_sub_tree(struct guestdev *gdev, struct pci_dev *dev,
++ pci_sbdf_match_t match)
++{
+ BUG_ON(!(gdev->flags & GUESTDEV_FLAG_SBDF));
+ for (;;) {
-+ if (sscanf(dev_name(&dev->dev), "%04x:%02x", &seg, &bus) != 2)
-+ continue;
-+ if (gdev->u.sbdf.seg == seg && gdev->u.sbdf.bus == bus &&
-+ gdev->u.sbdf.dev == PCI_SLOT(dev->devfn) &&
-+ gdev->u.sbdf.func == PCI_FUNC(dev->devfn))
++ if (match(gdev, dev))
+ return TRUE;
+ if (!dev->bus || !dev->bus->self)
+ break;
@@ -823,7 +901,8 @@ Acked-by: jbeulich@novell.com
+}
+
+/* Does PCI device belong to sub tree specified by guestdev parameter? */
-+int pci_is_guestdev(struct pci_dev *dev)
++static int __pci_is_guestdev(struct pci_dev *dev, pci_node_match_t node_match,
++ pci_sbdf_match_t sbdf_match)
+{
+ struct guestdev *gdev;
+ struct pcidev_sbdf pcidev_sbdf, *sbdf = NULL;
@@ -843,13 +922,14 @@ Acked-by: jbeulich@novell.com
+ if (!pci_get_sbdf_from_pcidev(dev, sbdf))
+ goto out;
+ }
-+ if (pci_is_in_devicepath_sub_tree(gdev, sbdf)) {
++ if (pci_is_in_devicepath_sub_tree(gdev, sbdf,
++ node_match)) {
+ result = TRUE;
+ goto out;
+ }
+ break;
+ case GUESTDEV_FLAG_SBDF:
-+ if (pci_is_in_sbdf_sub_tree(gdev, dev)) {
++ if (pci_is_in_sbdf_sub_tree(gdev, dev, sbdf_match)) {
+ result = TRUE;
+ goto out;
+ }
@@ -863,6 +943,11 @@ Acked-by: jbeulich@novell.com
+ pci_free_sbdf(sbdf);
+ return result;
+}
++
++int pci_is_guestdev(struct pci_dev *dev)
++{
++ return __pci_is_guestdev(dev, pci_node_match, pci_sbdf_match);
++}
+EXPORT_SYMBOL_GPL(pci_is_guestdev);
+
+static int reassign_resources;
@@ -882,6 +967,42 @@ Acked-by: jbeulich@novell.com
+ return FALSE;
+}
+
++#ifdef CONFIG_PCI_IOMULTI
++static int pci_iomul_node_match(const struct devicepath_node *gdev_node,
++ const struct pcidev_sbdf_node *sbdf_node,
++ int options)
++{
++ return (options & GUESTDEV_OPT_IOMUL) &&
++ ((gdev_node->child != NULL &&
++ sbdf_node->child != NULL &&
++ gdev_node->dev == sbdf_node->dev &&
++ gdev_node->func == sbdf_node->func) ||
++ (gdev_node->child == NULL &&
++ sbdf_node->child == NULL &&
++ gdev_node->dev == sbdf_node->dev));
++}
++
++static int pci_iomul_sbdf_match(const struct guestdev *gdev,
++ const struct pci_dev *dev)
++{
++ int seg, bus;
++
++ if (sscanf(dev_name(&dev->dev), "%04x:%02x", &seg, &bus) != 2)
++ return FALSE;
++
++ return (gdev->options & GUESTDEV_OPT_IOMUL) &&
++ gdev->u.sbdf.seg == seg &&
++ gdev->u.sbdf.bus == bus &&
++ gdev->u.sbdf.dev == PCI_SLOT(dev->devfn);
++}
++
++int pci_is_iomuldev(struct pci_dev *dev)
++{
++ return __pci_is_guestdev(dev,
++ pci_iomul_node_match, pci_iomul_sbdf_match);
++}
++#endif /* CONFIG_PCI_IOMULTI */
++
+/* Check whether the devicepath exists under the pci root bus */
+static int __init pci_check_devicepath_exists(
+ struct guestdev *gdev, struct pci_bus *bus)
@@ -971,9 +1092,1481 @@ Acked-by: jbeulich@novell.com
+
+fs_initcall(pci_check_guestdev_exists);
+
---- head-2009-05-19.orig/drivers/pci/pci.c 2009-05-19 09:37:31.000000000 +0200
-+++ head-2009-05-19/drivers/pci/pci.c 2009-05-19 09:42:46.000000000 +0200
-@@ -2489,6 +2489,13 @@ resource_size_t pci_specified_resource_a
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ head-2009-05-29/drivers/pci/iomulti.c 2009-06-09 15:11:29.000000000 +0200
+@@ -0,0 +1,1415 @@
++/*
++ * 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, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++ *
++ * Copyright (c) 2009 Isaku Yamahata
++ * VA Linux Systems Japan K.K.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/list.h>
++#include <linux/fs.h>
++#include <linux/miscdevice.h>
++#include <linux/pci.h>
++#include <linux/sort.h>
++
++#include <asm/setup.h>
++#include <asm/uaccess.h>
++
++#include "pci.h"
++#include "iomulti.h"
++
++#define PCI_NUM_BARS 6
++#define PCI_BUS_MAX 255
++#define PCI_DEV_MAX 31
++#define PCI_FUNC_MAX 7
++#define PCI_NUM_FUNC 8
++
++/* see pci_resource_len */
++static inline resource_size_t pci_iomul_len(const struct resource* r)
++{
++ if (r->start == 0 && r->start == r->end)
++ return 0;
++ return r->end - r->start + 1;
++}
++
++#define ROUND_UP(x, a) (((x) + (a) - 1) & ~((a) - 1))
++/* stolen from pbus_size_io() */
++static unsigned long pdev_size_io(struct pci_dev *pdev)
++{
++ unsigned long size = 0, size1 = 0;
++ int i;
++
++ for (i = 0; i < PCI_NUM_RESOURCES; i++) {
++ struct resource *r = &pdev->resource[i];
++ unsigned long r_size;
++
++ if (!(r->flags & IORESOURCE_IO))
++ continue;
++
++ r_size = r->end - r->start + 1;
++
++ if (r_size < 0x400)
++ /* Might be re-aligned for ISA */
++ size += r_size;
++ else
++ size1 += r_size;
++ }
++
++/* To be fixed in 2.5: we should have sort of HAVE_ISA
++ flag in the struct pci_bus. */
++#if defined(CONFIG_ISA) || defined(CONFIG_EISA)
++ size = (size & 0xff) + ((size & ~0xffUL) << 2);
++#endif
++ size = ROUND_UP(size + size1, 4096);
++ return size;
++}
++
++/*
++ * primary bus number of PCI-PCI bridge in switch on which
++ * this slots sits.
++ * i.e. the primary bus number of PCI-PCI bridge of downstream port
++ * or root port in switch.
++ * the secondary bus number of PCI-PCI bridge of upstream port
++ * in switch.
++ */
++static inline unsigned char pci_dev_switch_busnr(struct pci_dev *pdev)
++{
++ if (pci_find_capability(pdev, PCI_CAP_ID_EXP))
++ return pdev->bus->primary;
++ return pdev->bus->number;
++}
++
++struct pci_iomul_func {
++ int segment;
++ uint8_t bus;
++ uint8_t devfn;
++
++ /* only start and end are used */
++ unsigned long io_size;
++ uint8_t io_bar;
++ struct resource resource[PCI_NUM_BARS];
++ struct resource dummy_parent;
++};
++
++struct pci_iomul_switch {
++ struct list_head list; /* bus_list_lock protects */
++
++ /*
++ * This lock the following entry and following
++ * pci_iomul_slot/pci_iomul_func.
++ */
++ struct mutex lock;
++ struct kref kref;
++
++ struct resource io_resource;
++ struct resource *io_region;
++ unsigned int count;
++ struct pci_dev *current_pdev;
++
++ int segment;
++ uint8_t bus;
++
++ uint32_t io_base;
++ uint32_t io_limit;
++
++ /* func which has the largeset io size*/
++ struct pci_iomul_func *func;
++
++ struct list_head slots;
++};
++
++struct pci_iomul_slot {
++ struct list_head sibling;
++ struct kref kref;
++ /*
++ * busnr
++ * when pcie, the primary busnr of the PCI-PCI bridge on which
++ * this devices sits.
++ */
++ uint8_t switch_busnr;
++ struct resource dummy_parent[PCI_NUM_RESOURCES - PCI_BRIDGE_RESOURCES];
++
++ /* device */
++ int segment;
++ uint8_t bus;
++ uint8_t dev;
++
++ struct pci_iomul_func *func[PCI_NUM_FUNC];
++};
++
++static LIST_HEAD(switch_list);
++static DEFINE_MUTEX(switch_list_lock);
++
++/*****************************************************************************/
++static int inline pci_iomul_switch_io_allocated(
++ const struct pci_iomul_switch *sw)
++{
++ return !(sw->io_base == 0 || sw->io_base > sw->io_limit);
++}
++
++static struct pci_iomul_switch *pci_iomul_find_switch_locked(int segment,
++ uint8_t bus)
++{
++ struct pci_iomul_switch *sw;
++
++ BUG_ON(!mutex_is_locked(&switch_list_lock));
++ list_for_each_entry(sw, &switch_list, list) {
++ if (sw->segment == segment && sw->bus == bus)
++ return sw;
++ }
++ return NULL;
++}
++
++static struct pci_iomul_slot *pci_iomul_find_slot_locked(
++ struct pci_iomul_switch *sw, uint8_t busnr, uint8_t dev)
++{
++ struct pci_iomul_slot *slot;
++
++ BUG_ON(!mutex_is_locked(&sw->lock));
++ list_for_each_entry(slot, &sw->slots, sibling) {
++ if (slot->bus == busnr && slot->dev == dev)
++ return slot;
++ }
++ return NULL;
++}
++
++static void pci_iomul_switch_get(struct pci_iomul_switch *sw);
++/* on successfull exit, sw->lock is locked for use slot and
++ * refrence count of sw is incremented.
++ */
++static void pci_iomul_get_lock_switch(struct pci_dev *pdev,
++ struct pci_iomul_switch **swp,
++ struct pci_iomul_slot **slot)
++{
++ mutex_lock(&switch_list_lock);
++
++ *swp = pci_iomul_find_switch_locked(pci_domain_nr(pdev->bus),
++ pci_dev_switch_busnr(pdev));
++ if (*swp == NULL) {
++ *slot = NULL;
++ goto out;
++ }
++
++ mutex_lock(&(*swp)->lock);
++ *slot = pci_iomul_find_slot_locked(*swp, pdev->bus->number,
++ PCI_SLOT(pdev->devfn));
++ if (*slot == NULL) {
++ mutex_unlock(&(*swp)->lock);
++ *swp = NULL;
++ } else {
++ pci_iomul_switch_get(*swp);
++ }
++out:
++ mutex_unlock(&switch_list_lock);
++}
++
++static struct pci_iomul_switch *pci_iomul_switch_alloc(int segment,
++ uint8_t bus)
++{
++ struct pci_iomul_switch *sw;
++
++ BUG_ON(!mutex_is_locked(&switch_list_lock));
++
++ sw = kmalloc(sizeof(*sw), GFP_KERNEL);
++
++ mutex_init(&sw->lock);
++ kref_init(&sw->kref);
++ sw->io_region = NULL;
++ sw->count = 0;
++ sw->current_pdev = NULL;
++ sw->segment = segment;
++ sw->bus = bus;
++ sw->io_base = 0;
++ sw->io_limit = 0;
++ sw->func = NULL;
++ INIT_LIST_HEAD(&sw->slots);
++
++ return sw;
++}
++
++static void pci_iomul_switch_add_locked(struct pci_iomul_switch *sw)
++{
++ BUG_ON(!mutex_is_locked(&switch_list_lock));
++ list_add(&sw->list, &switch_list);
++}
++
++#ifdef CONFIG_HOTPLUG_PCI
++static void pci_iomul_switch_del_locked(struct pci_iomul_switch *sw)
++{
++ BUG_ON(!mutex_is_locked(&switch_list_lock));
++ list_del(&sw->list);
++}
++#endif
++
++static void pci_iomul_switch_get(struct pci_iomul_switch *sw)
++{
++ kref_get(&sw->kref);
++}
++
++static void pci_iomul_switch_release(struct kref *kref)
++{
++ struct pci_iomul_switch *sw = container_of(kref,
++ struct pci_iomul_switch,
++ kref);
++ kfree(sw);
++}
++
++static void pci_iomul_switch_put(struct pci_iomul_switch *sw)
++{
++ kref_put(&sw->kref, &pci_iomul_switch_release);
++}
++
++static int __devinit pci_iomul_slot_init(struct pci_dev *pdev,
++ struct pci_iomul_slot *slot)
++{
++ u16 rpcap;
++ u16 cap;
++
++ rpcap = pci_find_capability(pdev, PCI_CAP_ID_EXP);
++ if (!rpcap) {
++ /* pci device isn't supported */
++ printk(KERN_INFO
++ "PCI: sharing io port of non PCIe device %s "
++ "isn't supported. ignoring.\n",
++ pci_name(pdev));
++ return -ENOSYS;
++ }
++
++ pci_read_config_word(pdev, rpcap + PCI_CAP_FLAGS, &cap);
++ switch ((cap & PCI_EXP_FLAGS_TYPE) >> 4) {
++ case PCI_EXP_TYPE_RC_END:
++ printk(KERN_INFO
++ "PCI: io port sharing of root complex integrated "
++ "endpoint %s isn't supported. ignoring.\n",
++ pci_name(pdev));
++ return -ENOSYS;
++ case PCI_EXP_TYPE_ENDPOINT:
++ case PCI_EXP_TYPE_LEG_END:
++ break;
++ default:
++ printk(KERN_INFO
++ "PCI: io port sharing of non endpoint %s "
++ "doesn't make sense. ignoring.\n",
++ pci_name(pdev));
++ return -EINVAL;
++ }
++
++ kref_init(&slot->kref);
++ slot->switch_busnr = pci_dev_switch_busnr(pdev);
++ slot->segment = pci_domain_nr(pdev->bus);
++ slot->bus = pdev->bus->number;
++ slot->dev = PCI_SLOT(pdev->devfn);
++
++ return 0;
++}
++
++static struct pci_iomul_slot *__devinit
++pci_iomul_slot_alloc(struct pci_dev *pdev)
++{
++ struct pci_iomul_slot *slot;
++
++ slot = kzalloc(sizeof(*slot), GFP_KERNEL);
++ if (slot == NULL)
++ return NULL;
++
++ if (pci_iomul_slot_init(pdev, slot) != 0) {
++ kfree(slot);
++ return NULL;
++ }
++ return slot;
++}
++
++static void pci_iomul_slot_add_locked(struct pci_iomul_switch *sw,
++ struct pci_iomul_slot *slot)
++{
++ BUG_ON(!mutex_is_locked(&sw->lock));
++ list_add(&slot->sibling, &sw->slots);
++}
++
++#ifdef CONFIG_HOTPLUG_PCI
++static void pci_iomul_slot_del_locked(struct pci_iomul_switch *sw,
++ struct pci_iomul_slot *slot)
++{
++ BUG_ON(!mutex_is_locked(&sw->lock));
++ list_del(&slot->sibling);
++}
++#endif
++
++static void pci_iomul_slot_get(struct pci_iomul_slot *slot)
++{
++ kref_get(&slot->kref);
++}
++
++static void pci_iomul_slot_release(struct kref *kref)
++{
++ struct pci_iomul_slot *slot = container_of(kref, struct pci_iomul_slot,
++ kref);
++ kfree(slot);
++}
++
++static void pci_iomul_slot_put(struct pci_iomul_slot *slot)
++{
++ kref_put(&slot->kref, &pci_iomul_slot_release);
++}
++
++/*****************************************************************************/
++static int pci_get_sbd(const char *str,
++ int *segment__, uint8_t *bus__, uint8_t *dev__)
++{
++ int segment;
++ int bus;
++ int dev;
++
++ if (sscanf(str, "%x:%x:%x", &segment, &bus, &dev) != 3) {
++ if (sscanf(str, "%x:%x", &bus, &dev) == 2)
++ segment = 0;
++ else
++ return -EINVAL;
++ }
++
++ if (segment < 0 || INT_MAX <= segment)
++ return -EINVAL;
++ if (bus < 0 || PCI_BUS_MAX < bus)
++ return -EINVAL;
++ if (dev < 0 || PCI_DEV_MAX < dev)
++ return -EINVAL;
++
++ *segment__ = segment;
++ *bus__ = bus;
++ *dev__ = dev;
++ return 0;
++}
++
++static char iomul_param[COMMAND_LINE_SIZE];
++#define TOKEN_MAX 10 /* SSSS:BB:DD length is 10 */
++static int pci_is_iomul_dev_param(struct pci_dev *pdev)
++{
++ int len;
++ char *p;
++ char *next_str;
++
++ for (p = &iomul_param[0]; *p != '\0'; p = next_str + 1) {
++ next_str = strchr(p, ',');
++ if (next_str != NULL)
++ len = next_str - p;
++ else
++ len = strlen(p);
++
++ if (len > 0 && len <= TOKEN_MAX) {
++ char tmp[TOKEN_MAX+1];
++ int seg;
++ uint8_t bus;
++ uint8_t dev;
++
++ strlcpy(tmp, p, len);
++ if (pci_get_sbd(tmp, &seg, &bus, &dev) == 0 &&
++ pci_domain_nr(pdev->bus) == seg &&
++ pdev->bus->number == bus &&
++ PCI_SLOT(pdev->devfn) == dev)
++ return 1;
++ }
++ if (next_str == NULL)
++ break;
++ }
++
++ /* check guestcev=<device>+iomul option */
++ return pci_is_iomuldev(pdev);
++}
++
++/*
++ * Format: [<segment>:]<bus>:<dev>[,[<segment>:]<bus>:<dev>[,...]
++ */
++static int __init pci_iomul_param_setup(char *str)
++{
++ if (strlen(str) >= COMMAND_LINE_SIZE)
++ return 0;
++
++ /* parse it after pci bus scanning */
++ strlcpy(iomul_param, str, sizeof(iomul_param));
++ return 1;
++}
++__setup("guestiomuldev=", pci_iomul_param_setup);
++
++/*****************************************************************************/
++static void __devinit pci_iomul_set_bridge_io_window(struct pci_dev *bridge,
++ uint32_t io_base,
++ uint32_t io_limit)
++{
++ uint16_t l;
++ uint32_t upper16;
++
++ io_base >>= 12;
++ io_base <<= 4;
++ io_limit >>= 12;
++ io_limit <<= 4;
++ l = (io_base & 0xff) | ((io_limit & 0xff) << 8);
++ upper16 = ((io_base & 0xffff00) >> 8) |
++ (((io_limit & 0xffff00) >> 8) << 16);
++
++ /* Temporarily disable the I/O range before updating PCI_IO_BASE. */
++ pci_write_config_dword(bridge, PCI_IO_BASE_UPPER16, 0x0000ffff);
++ /* Update lower 16 bits of I/O base/limit. */
++ pci_write_config_word(bridge, PCI_IO_BASE, l);
++ /* Update upper 16 bits of I/O base/limit. */
++ pci_write_config_dword(bridge, PCI_IO_BASE_UPPER16, upper16);
++}
++
++static void __devinit pci_disable_bridge_io_window(struct pci_dev *bridge)
++{
++ /* set base = 0xffffff limit = 0x0 */
++ pci_iomul_set_bridge_io_window(bridge, 0xffffff, 0);
++}
++
++static int __devinit pci_iomul_func_scan(struct pci_dev *pdev,
++ struct pci_iomul_slot *slot,
++ uint8_t func)
++{
++ struct pci_iomul_func *f;
++ unsigned int i;
++
++ f = kzalloc(sizeof(*f), GFP_KERNEL);
++ if (f == NULL)
++ return -ENOMEM;
++
++ f->segment = slot->segment;
++ f->bus = slot->bus;
++ f->devfn = PCI_DEVFN(slot->dev, func);
++ f->io_size = pdev_size_io(pdev);
++
++ for (i = 0; i < PCI_NUM_BARS; i++) {
++ if (!(pci_resource_flags(pdev, i) & IORESOURCE_IO))
++ continue;
++ if (pci_resource_len(pdev, i) == 0)
++ continue;
++
++ f->io_bar |= 1 << i;
++ f->resource[i] = pdev->resource[i];
++ }
++
++ if (f->io_bar)
++ slot->func[func] = f;
++ else
++ kfree(f);
++ return 0;
++}
++
++/*
++ * This is tricky part.
++ * fake PCI resource assignment routines by setting flags to 0.
++ * PCI resource allocate routines think the resource should
++ * be allocated by checking flags. 0 means this resource isn't used.
++ * See pbus_size_io() and pdev_sort_resources().
++ *
++ * After allocated resources, flags (IORESOURCE_IO) is exported
++ * to other part including user process.
++ * So we have to set flags to IORESOURCE_IO, but at the same time
++ * we must prevent those resources from reassigning when pci hot plug.
++ * To achieve that, set r->parent to dummy resource.
++ */
++static void __devinit pci_iomul_disable_resource(struct resource *r)
++{
++ /* don't allocate this resource */
++ r->flags = 0;
++}
++
++static void __devinit pci_iomul_reenable_resource(
++ struct resource *dummy_parent, struct resource *r)
++{
++ int ret;
++
++ dummy_parent->start = r->start;
++ dummy_parent->end = r->end;
++ dummy_parent->flags = r->flags;
++ dummy_parent->name = "PCI IOMUL dummy resource";
++
++ ret = request_resource(dummy_parent, r);
++ BUG_ON(ret);
++}
++
++static void __devinit pci_iomul_fixup_ioresource(struct pci_dev *pdev,
++ struct pci_iomul_func *func,
++ int reassign, int dealloc)
++{
++ uint8_t i;
++ struct resource *r;
++
++ printk(KERN_INFO "PCI: deallocating io resource[%s]. io size 0x%lx\n",
++ pci_name(pdev), func->io_size);
++ for (i = 0; i < PCI_NUM_BARS; i++) {
++ r = &pdev->resource[i];
++ if (!(func->io_bar & (1 << i)))
++ continue;
++
++ if (reassign) {
++ r->end -= r->start;
++ r->start = 0;
++ pci_update_resource(pdev, i);
++ func->resource[i] = *r;
++ }
++
++ if (dealloc)
++ /* don't allocate this resource */
++ pci_iomul_disable_resource(r);
++ }
++
++ /* parent PCI-PCI bridge */
++ if (!reassign)
++ return;
++ pdev = pdev->bus->self;
++ if ((pdev->class >> 8) == PCI_CLASS_BRIDGE_HOST)
++ return;
++ pci_disable_bridge_io_window(pdev);
++ for (i = 0; i < PCI_NUM_RESOURCES; i++) {
++ r = &pdev->resource[i];
++ if (!(r->flags & IORESOURCE_IO))
++ continue;
++
++ r->end -= r->start;
++ r->start = 0;
++ if (i < PCI_BRIDGE_RESOURCES)
++ pci_update_resource(pdev, i);
++ }
++}
++
++static void __devinit __quirk_iomul_dealloc_ioresource(
++ struct pci_iomul_switch *sw,
++ struct pci_dev *pdev, struct pci_iomul_slot *slot)
++{
++ struct pci_iomul_func *f;
++ struct pci_iomul_func *__f;
++
++ if (pci_iomul_func_scan(pdev, slot, PCI_FUNC(pdev->devfn)) != 0)
++ return;
++
++ f = slot->func[PCI_FUNC(pdev->devfn)];
++ if (f == NULL)
++ return;
++
++ __f = sw->func;
++ /* sw->io_base == 0 means that we are called at boot time.
++ * != 0 means that we are called by php after boot. */
++ if (sw->io_base == 0 &&
++ (__f == NULL || __f->io_size < f->io_size)) {
++ if (__f != NULL) {
++ struct pci_bus *__pbus;
++ struct pci_dev *__pdev;
++
++ __pbus = pci_find_bus(__f->segment, __f->bus);
++ BUG_ON(__pbus == NULL);
++ __pdev = pci_get_slot(__pbus, __f->devfn);
++ BUG_ON(__pdev == NULL);
++ pci_iomul_fixup_ioresource(__pdev, __f, 0, 1);
++ pci_dev_put(__pdev);
++ }
++
++ pci_iomul_fixup_ioresource(pdev, f, 1, 0);
++ sw->func = f;
++ } else {
++ pci_iomul_fixup_ioresource(pdev, f, 1, 1);
++ }
++}
++
++static void __devinit quirk_iomul_dealloc_ioresource(struct pci_dev *pdev)
++{
++ struct pci_iomul_switch *sw;
++ struct pci_iomul_slot *slot;
++
++ if (pdev->hdr_type != PCI_HEADER_TYPE_NORMAL)
++ return;
++ if ((pdev->class >> 8) == PCI_CLASS_BRIDGE_HOST)
++ return; /* PCI Host Bridge isn't a target device */
++ if (!pci_is_iomul_dev_param(pdev))
++ return;
++
++ mutex_lock(&switch_list_lock);
++ sw = pci_iomul_find_switch_locked(pci_domain_nr(pdev->bus),
++ pci_dev_switch_busnr(pdev));
++ if (sw == NULL) {
++ sw = pci_iomul_switch_alloc(pci_domain_nr(pdev->bus),
++ pci_dev_switch_busnr(pdev));
++ if (sw == NULL) {
++ mutex_unlock(&switch_list_lock);
++ printk(KERN_WARNING
++ "PCI: can't allocate memory "
++ "for sw of IO mulplexing %s", pci_name(pdev));
++ return;
++ }
++ pci_iomul_switch_add_locked(sw);
++ }
++ pci_iomul_switch_get(sw);
++ mutex_unlock(&switch_list_lock);
++
++ mutex_lock(&sw->lock);
++ slot = pci_iomul_find_slot_locked(sw, pdev->bus->number,
++ PCI_SLOT(pdev->devfn));
++ if (slot == NULL) {
++ slot = pci_iomul_slot_alloc(pdev);
++ if (slot == NULL) {
++ mutex_unlock(&sw->lock);
++ pci_iomul_switch_put(sw);
++ printk(KERN_WARNING "PCI: can't allocate memory "
++ "for IO mulplexing %s", pci_name(pdev));
++ return;
++ }
++ pci_iomul_slot_add_locked(sw, slot);
++ }
++
++ printk(KERN_INFO "PCI: disable device and release io resource[%s].\n",
++ pci_name(pdev));
++ pci_disable_device(pdev);
++
++ __quirk_iomul_dealloc_ioresource(sw, pdev, slot);
++
++ mutex_unlock(&sw->lock);
++ pci_iomul_switch_put(sw);
++}
++DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID,
++ quirk_iomul_dealloc_ioresource);
++
++static void __devinit pci_iomul_read_bridge_io(struct pci_iomul_switch *sw)
++{
++ struct pci_iomul_func *f = sw->func;
++
++ struct pci_bus *pbus;
++ struct pci_dev *pdev;
++ struct pci_dev *bridge;
++
++ uint16_t l;
++ uint16_t base_upper16;
++ uint16_t limit_upper16;
++ uint32_t io_base;
++ uint32_t io_limit;
++
++ pbus = pci_find_bus(f->segment, f->bus);
++ BUG_ON(pbus == NULL);
++
++ pdev = pci_get_slot(pbus, f->devfn);
++ BUG_ON(pdev == NULL);
++
++ bridge = pdev->bus->self;
++ pci_read_config_word(bridge, PCI_IO_BASE, &l);
++ pci_read_config_word(bridge, PCI_IO_BASE_UPPER16, &base_upper16);
++ pci_read_config_word(bridge, PCI_IO_LIMIT_UPPER16, &limit_upper16);
++
++ io_base = (l & 0xf0) | ((uint32_t)base_upper16 << 8);
++ io_base <<= 8;
++ io_limit = (l >> 8) | ((uint32_t)limit_upper16 << 8);
++ io_limit <<= 8;
++ io_limit |= 0xfff;
++
++ sw->io_base = io_base;
++ sw->io_limit = io_limit;
++
++ pci_dev_put(pdev);
++ printk(KERN_INFO "PCI: bridge %s base 0x%x limit 0x%x\n",
++ pci_name(bridge), sw->io_base, sw->io_limit);
++}
++
++static void __devinit pci_iomul_setup_brige(struct pci_dev *bridge,
++ uint32_t io_base,
++ uint32_t io_limit)
++{
++ uint16_t cmd;
++
++ if ((bridge->class >> 8) == PCI_CLASS_BRIDGE_HOST)
++ return;
++
++ pci_iomul_set_bridge_io_window(bridge, io_base, io_limit);
++
++ /* and forcibly enables IO */
++ pci_read_config_word(bridge, PCI_COMMAND, &cmd);
++ if (!(cmd & PCI_COMMAND_IO)) {
++ cmd |= PCI_COMMAND_IO;
++ printk(KERN_INFO "PCI: Forcibly Enabling IO %s\n",
++ pci_name(bridge));
++ pci_write_config_word(bridge, PCI_COMMAND, cmd);
++ }
++}
++
++struct __bar {
++ unsigned long size;
++ uint8_t bar;
++};
++
++/* decending order */
++static int __devinit pci_iomul_bar_cmp(const void *lhs__, const void *rhs__)
++{
++ const struct __bar *lhs = (struct __bar*)lhs__;
++ const struct __bar *rhs = (struct __bar*)rhs__;
++ return - (lhs->size - rhs->size);
++}
++
++static void __devinit pci_iomul_setup_dev(struct pci_dev *pdev,
++ struct pci_iomul_func *f,
++ uint32_t io_base)
++{
++ struct __bar bars[PCI_NUM_BARS];
++ int i;
++ uint8_t num_bars = 0;
++ struct resource *r;
++
++ printk(KERN_INFO "PCI: Forcibly assign IO %s from 0x%x\n",
++ pci_name(pdev), io_base);
++
++ for (i = 0; i < PCI_NUM_BARS; i++) {
++ if (!(f->io_bar & (1 << i)))
++ continue;
++
++ r = &f->resource[i];
++ bars[num_bars].size = pci_iomul_len(r);
++ bars[num_bars].bar = i;
++
++ num_bars++;
++ }
++
++ sort(bars, num_bars, sizeof(bars[0]), &pci_iomul_bar_cmp, NULL);
++
++ for (i = 0; i < num_bars; i++) {
++ struct resource *fr = &f->resource[bars[i].bar];
++ r = &pdev->resource[bars[i].bar];
++
++ BUG_ON(r->start != 0);
++ r->start += io_base;
++ r->end += io_base;
++
++ fr->start = r->start;
++ fr->end = r->end;
++
++ /* pci_update_resource() check flags. */
++ r->flags = fr->flags;
++ pci_update_resource(pdev, bars[i].bar);
++ pci_iomul_reenable_resource(&f->dummy_parent, r);
++
++ io_base += bars[i].size;
++ }
++}
++
++static void __devinit pci_iomul_release_io_resource(
++ struct pci_dev *pdev, struct pci_iomul_switch *sw,
++ struct pci_iomul_slot *slot, struct pci_iomul_func *f)
++{
++ int i;
++ struct resource *r;
++
++ for (i = 0; i < PCI_NUM_BARS; i++) {
++ if (pci_resource_flags(pdev, i) & IORESOURCE_IO &&
++ pdev->resource[i].parent != NULL) {
++ r = &pdev->resource[i];
++ f->resource[i] = *r;
++ release_resource(r);
++ pci_iomul_reenable_resource(&f->dummy_parent, r);
++ }
++ }
++
++ /* parent PCI-PCI bridge */
++ pdev = pdev->bus->self;
++ if ((pdev->class >> 8) != PCI_CLASS_BRIDGE_HOST) {
++ for (i = PCI_BRIDGE_RESOURCES; i < PCI_NUM_RESOURCES; i++) {
++ struct resource *parent = pdev->resource[i].parent;
++
++ if (pci_resource_flags(pdev, i) & IORESOURCE_IO &&
++ parent != NULL) {
++ r = &pdev->resource[i];
++
++ sw->io_resource.flags = r->flags;
++ sw->io_resource.start = sw->io_base;
++ sw->io_resource.end = sw->io_limit;
++ sw->io_resource.name = "PCI IO Multiplexer";
++
++ release_resource(r);
++ pci_iomul_reenable_resource(
++ &slot->dummy_parent[i - PCI_BRIDGE_RESOURCES], r);
++
++ if (request_resource(parent,
++ &sw->io_resource))
++ printk(KERN_ERR
++ "PCI IOMul: can't allocate "
++ "resource. [0x%x, 0x%x]",
++ sw->io_base, sw->io_limit);
++ }
++ }
++ }
++}
++
++static void __devinit quirk_iomul_reassign_ioresource(struct pci_dev *pdev)
++{
++ struct pci_iomul_switch *sw;
++ struct pci_iomul_slot *slot;
++ struct pci_iomul_func *sf;
++ struct pci_iomul_func *f;
++
++ pci_iomul_get_lock_switch(pdev, &sw, &slot);
++ if (sw == NULL || slot == NULL)
++ return;
++
++ if (sw->io_base == 0)
++ pci_iomul_read_bridge_io(sw);
++ if (!pci_iomul_switch_io_allocated(sw))
++ goto out;
++
++ sf = sw->func;
++ f = slot->func[PCI_FUNC(pdev->devfn)];
++ if (f == NULL)
++ /* (sf == NULL || f == NULL) case
++ * can happen when all the specified devices
++ * don't have io space
++ */
++ goto out;
++
++ if (sf != NULL &&
++ (pci_domain_nr(pdev->bus) != sf->segment ||
++ pdev->bus->number != sf->bus ||
++ PCI_SLOT(pdev->devfn) != PCI_SLOT(sf->devfn)) &&
++ PCI_FUNC(pdev->devfn) == 0) {
++ pci_iomul_setup_brige(pdev->bus->self,
++ sw->io_base, sw->io_limit);
++ }
++
++ BUG_ON(f->io_size > sw->io_limit - sw->io_base + 1);
++ if (/* f == sf */
++ sf != NULL &&
++ pci_domain_nr(pdev->bus) == sf->segment &&
++ pdev->bus->number == sf->bus &&
++ pdev->devfn == sf->devfn)
++ pci_iomul_release_io_resource(pdev, sw, slot, f);
++ else
++ pci_iomul_setup_dev(pdev, f, sw->io_base);
++
++out:
++ mutex_unlock(&sw->lock);
++ pci_iomul_switch_put(sw);
++}
++
++DECLARE_PCI_FIXUP_FINAL(PCI_ANY_ID, PCI_ANY_ID,
++ quirk_iomul_reassign_ioresource);
++
++/*****************************************************************************/
++#ifdef CONFIG_HOTPLUG_PCI
++static int __devinit __pci_iomul_notifier_del_device(struct pci_dev *pdev)
++{
++ struct pci_iomul_switch *sw;
++ struct pci_iomul_slot *slot;
++ int i;
++
++ pci_iomul_get_lock_switch(pdev, &sw, &slot);
++ if (sw == NULL || slot == NULL)
++ return 0;
++
++ if (sw->func == slot->func[PCI_FUNC(pdev->devfn)])
++ sw->func = NULL;
++ kfree(slot->func[PCI_FUNC(pdev->devfn)]);
++ slot->func[PCI_FUNC(pdev->devfn)] = NULL;
++ for (i = 0; i < PCI_NUM_FUNC; i++) {
++ if (slot->func[i] != NULL)
++ goto out;
++ }
++
++ pci_iomul_slot_del_locked(sw, slot);
++ pci_iomul_slot_put(slot);
++
++out:
++ mutex_unlock(&sw->lock);
++ pci_iomul_switch_put(sw);
++ return 0;
++}
++
++static int __devinit __pci_iomul_notifier_del_switch(struct pci_dev *pdev)
++{
++ struct pci_iomul_switch *sw;
++
++ mutex_lock(&switch_list_lock);
++ sw = pci_iomul_find_switch_locked(pci_domain_nr(pdev->bus),
++ pdev->bus->number);
++ if (sw == NULL)
++ goto out;
++
++ pci_iomul_switch_del_locked(sw);
++
++ mutex_lock(&sw->lock);
++ if (sw->io_resource.parent)
++ release_resource(&sw->io_resource);
++ sw->io_base = 0; /* to tell this switch is removed */
++ sw->io_limit = 0;
++ BUG_ON(!list_empty(&sw->slots));
++ mutex_unlock(&sw->lock);
++
++out:
++ mutex_unlock(&switch_list_lock);
++ pci_iomul_switch_put(sw);
++ return 0;
++}
++
++static int __devinit pci_iomul_notifier_del_device(struct pci_dev *pdev)
++{
++ int ret;
++ switch (pdev->hdr_type) {
++ case PCI_HEADER_TYPE_NORMAL:
++ ret = __pci_iomul_notifier_del_device(pdev);
++ break;
++ case PCI_HEADER_TYPE_BRIDGE:
++ ret = __pci_iomul_notifier_del_switch(pdev);
++ break;
++ default:
++ printk(KERN_WARNING "PCI IOMUL: "
++ "device %s has unknown header type %02x, ignoring.\n",
++ pci_name(pdev), pdev->hdr_type);
++ ret = -EIO;
++ break;
++ }
++ return ret;
++}
++
++static int __devinit pci_iomul_notifier(struct notifier_block *nb,
++ unsigned long action, void *data)
++{
++ struct device *dev = data;
++ struct pci_dev *pdev = to_pci_dev(dev);
++
++ switch (action) {
++ case BUS_NOTIFY_ADD_DEVICE:
++ quirk_iomul_reassign_ioresource(pdev);
++ break;
++ case BUS_NOTIFY_DEL_DEVICE:
++ return pci_iomul_notifier_del_device(pdev);
++ default:
++ /* nothing */
++ break;
++ }
++
++ return 0;
++}
++
++static struct notifier_block pci_iomul_nb = {
++ .notifier_call = pci_iomul_notifier,
++};
++
++static int __init pci_iomul_hotplug_init(void)
++{
++ bus_register_notifier(&pci_bus_type, &pci_iomul_nb);
++ return 0;
++}
++
++late_initcall(pci_iomul_hotplug_init);
++#endif
++
++/*****************************************************************************/
++struct pci_iomul_data {
++ struct mutex lock;
++
++ struct pci_dev *pdev;
++ struct pci_iomul_switch *sw;
++ struct pci_iomul_slot *slot; /* slot::kref */
++ struct pci_iomul_func **func; /* when dereferencing,
++ sw->lock is necessary */
++};
++
++static int pci_iomul_func_ioport(struct pci_iomul_func *func,
++ uint8_t bar, uint64_t offset, int *port)
++{
++ if (!(func->io_bar & (1 << bar)))
++ return -EINVAL;
++
++ *port = func->resource[bar].start + offset;
++ if (*port < func->resource[bar].start ||
++ *port > func->resource[bar].end)
++ return -EINVAL;
++
++ return 0;
++}
++
++static inline int pci_iomul_valid(struct pci_iomul_data *iomul)
++{
++ BUG_ON(!mutex_is_locked(&iomul->lock));
++ BUG_ON(!mutex_is_locked(&iomul->sw->lock));
++ return pci_iomul_switch_io_allocated(iomul->sw) &&
++ *iomul->func != NULL;
++}
++
++static void __pci_iomul_enable_io(struct pci_dev *pdev)
++{
++ uint16_t cmd;
++
++ pci_dev_get(pdev);
++ pci_read_config_word(pdev, PCI_COMMAND, &cmd);
++ cmd |= PCI_COMMAND_IO;
++ pci_write_config_word(pdev, PCI_COMMAND, cmd);
++}
++
++static void __pci_iomul_disable_io(struct pci_iomul_data *iomul,
++ struct pci_dev *pdev)
++{
++ uint16_t cmd;
++
++ if (!pci_iomul_valid(iomul))
++ return;
++
++ pci_read_config_word(pdev, PCI_COMMAND, &cmd);
++ cmd &= ~PCI_COMMAND_IO;
++ pci_write_config_word(pdev, PCI_COMMAND, cmd);
++ pci_dev_put(pdev);
++}
++
++static int pci_iomul_open(struct inode *inode, struct file *filp)
++{
++ struct pci_iomul_data *iomul;
++ iomul = kmalloc(sizeof(*iomul), GFP_KERNEL);
++ if (iomul == NULL)
++ return -ENOMEM;
++
++ mutex_init(&iomul->lock);
++ iomul->pdev = NULL;
++ iomul->sw = NULL;
++ iomul->slot = NULL;
++ iomul->func = NULL;
++ filp->private_data = (void*)iomul;
++
++ return 0;
++}
++
++static int pci_iomul_release(struct inode *inode, struct file *filp)
++{
++ struct pci_iomul_data *iomul =
++ (struct pci_iomul_data*)filp->private_data;
++ struct pci_iomul_switch *sw;
++ struct pci_iomul_slot *slot = NULL;
++
++ mutex_lock(&iomul->lock);
++ sw = iomul->sw;
++ slot = iomul->slot;
++ if (iomul->pdev != NULL) {
++ if (sw != NULL) {
++ mutex_lock(&sw->lock);
++ if (sw->current_pdev == iomul->pdev) {
++ __pci_iomul_disable_io(iomul,
++ sw->current_pdev);
++ sw->current_pdev = NULL;
++ }
++ sw->count--;
++ if (sw->count == 0) {
++ release_region(sw->io_region->start, sw->io_region->end - sw->io_region->start + 1);
++ sw->io_region = NULL;
++ }
++ mutex_unlock(&sw->lock);
++ }
++ pci_dev_put(iomul->pdev);
++ }
++ mutex_unlock(&iomul->lock);
++
++ if (slot != NULL)
++ pci_iomul_slot_put(slot);
++ if (sw != NULL)
++ pci_iomul_switch_put(sw);
++ kfree(iomul);
++ return 0;
++}
++
++static long pci_iomul_setup(struct pci_iomul_data *iomul,
++ struct pci_iomul_setup __user *arg)
++{
++ long error = 0;
++ struct pci_iomul_setup setup;
++ struct pci_iomul_switch *sw = NULL;
++ struct pci_iomul_slot *slot;
++ struct pci_bus *pbus;
++ struct pci_dev *pdev;
++
++ if (copy_from_user(&setup, arg, sizeof(setup)))
++ return -EFAULT;
++
++ pbus = pci_find_bus(setup.segment, setup.bus);
++ if (pbus == NULL)
++ return -ENODEV;
++ pdev = pci_get_slot(pbus, setup.dev);
++ if (pdev == NULL)
++ return -ENODEV;
++
++ mutex_lock(&iomul->lock);
++ if (iomul->sw != NULL) {
++ error = -EBUSY;
++ goto out0;
++ }
++
++ pci_iomul_get_lock_switch(pdev, &sw, &slot);
++ if (sw == NULL || slot == NULL) {
++ error = -ENODEV;
++ goto out0;
++ }
++ if (!pci_iomul_switch_io_allocated(sw)) {
++ error = -ENODEV;
++ goto out;
++ }
++
++ if (slot->func[setup.func] == NULL) {
++ error = -ENODEV;
++ goto out;
++ }
++
++ if (sw->count == 0) {
++ BUG_ON(sw->io_region != NULL);
++ sw->io_region =
++ request_region(sw->io_base,
++ sw->io_limit - sw->io_base + 1,
++ "PCI IO Multiplexer driver");
++ if (sw->io_region == NULL) {
++ mutex_unlock(&sw->lock);
++ error = -EBUSY;
++ goto out;
++ }
++ }
++ sw->count++;
++ pci_iomul_slot_get(slot);
++
++ iomul->pdev = pdev;
++ iomul->sw = sw;
++ iomul->slot = slot;
++ iomul->func = &slot->func[setup.func];
++
++out:
++ mutex_unlock(&sw->lock);
++out0:
++ mutex_unlock(&iomul->lock);
++ if (error != 0) {
++ if (sw != NULL)
++ pci_iomul_switch_put(sw);
++ pci_dev_put(pdev);
++ }
++ return error;
++}
++
++static int pci_iomul_lock(struct pci_iomul_data *iomul,
++ struct pci_iomul_switch **sw,
++ struct pci_iomul_func **func)
++{
++ mutex_lock(&iomul->lock);
++ *sw = iomul->sw;
++ if (*sw == NULL) {
++ mutex_unlock(&iomul->lock);
++ return -ENODEV;
++ }
++ mutex_lock(&(*sw)->lock);
++ if (!pci_iomul_valid(iomul)) {
++ mutex_unlock(&(*sw)->lock);
++ mutex_unlock(&iomul->lock);
++ return -ENODEV;
++ }
++ *func = *iomul->func;
++
++ return 0;
++}
++
++static long pci_iomul_disable_io(struct pci_iomul_data *iomul)
++{
++ long error = 0;
++ struct pci_iomul_switch *sw;
++ struct pci_iomul_func *dummy_func;
++ struct pci_dev *pdev;
++
++ if (pci_iomul_lock(iomul, &sw, &dummy_func) < 0)
++ return -ENODEV;
++
++ pdev = iomul->pdev;
++ if (pdev == NULL)
++ error = -ENODEV;
++
++ if (pdev != NULL && sw->current_pdev == pdev) {
++ __pci_iomul_disable_io(iomul, pdev);
++ sw->current_pdev = NULL;
++ }
++
++ mutex_unlock(&sw->lock);
++ mutex_unlock(&iomul->lock);
++ return error;
++}
++
++static void pci_iomul_switch_to(
++ struct pci_iomul_data *iomul, struct pci_iomul_switch *sw,
++ struct pci_dev *next_pdev)
++{
++ if (sw->current_pdev == next_pdev)
++ /* nothing to do */
++ return;
++
++ if (sw->current_pdev != NULL)
++ __pci_iomul_disable_io(iomul, sw->current_pdev);
++
++ __pci_iomul_enable_io(next_pdev);
++ sw->current_pdev = next_pdev;
++}
++
++static long pci_iomul_in(struct pci_iomul_data *iomul,
++ struct pci_iomul_in __user *arg)
++{
++ struct pci_iomul_in in;
++ struct pci_iomul_switch *sw;
++ struct pci_iomul_func *func;
++
++ long error = 0;
++ int port;
++ uint32_t value = 0;
++
++ if (copy_from_user(&in, arg, sizeof(in)))
++ return -EFAULT;
++
++ if (pci_iomul_lock(iomul, &sw, &func) < 0)
++ return -ENODEV;
++
++ error = pci_iomul_func_ioport(func, in.bar, in.offset, &port);
++ if (error)
++ goto out;
++
++ pci_iomul_switch_to(iomul, sw, iomul->pdev);
++ switch (in.size) {
++ case 4:
++ value = inl(port);
++ break;
++ case 2:
++ value = inw(port);
++ break;
++ case 1:
++ value = inb(port);
++ break;
++ default:
++ error = -EINVAL;
++ break;
++ }
++
++out:
++ mutex_unlock(&sw->lock);
++ mutex_unlock(&iomul->lock);
++
++ if (error == 0 && put_user(value, &arg->value))
++ return -EFAULT;
++ return error;
++}
++
++static long pci_iomul_out(struct pci_iomul_data *iomul,
++ struct pci_iomul_out __user *arg)
++{
++ struct pci_iomul_in out;
++ struct pci_iomul_switch *sw;
++ struct pci_iomul_func *func;
++
++ long error = 0;
++ int port;
++
++ if (copy_from_user(&out, arg, sizeof(out)))
++ return -EFAULT;
++
++ if (pci_iomul_lock(iomul, &sw, &func) < 0)
++ return -ENODEV;
++
++ error = pci_iomul_func_ioport(func, out.bar, out.offset, &port);
++ if (error)
++ goto out;
++
++ pci_iomul_switch_to(iomul, sw, iomul->pdev);
++ switch (out.size) {
++ case 4:
++ outl(out.value, port);
++ break;
++ case 2:
++ outw(out.value, port);
++ break;
++ case 1:
++ outb(out.value, port);
++ break;
++ default:
++ error = -EINVAL;
++ break;
++ }
++
++out:
++ mutex_unlock(&sw->lock);
++ mutex_unlock(&iomul->lock);
++ return error;
++}
++
++static long pci_iomul_ioctl(struct file *filp,
++ unsigned int cmd, unsigned long arg)
++{
++ long error;
++ struct pci_iomul_data *iomul =
++ (struct pci_iomul_data*)filp->private_data;
++
++ if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
++ return -EPERM;
++
++ switch (cmd) {
++ case PCI_IOMUL_SETUP:
++ error = pci_iomul_setup(iomul,
++ (struct pci_iomul_setup __user *)arg);
++ break;
++ case PCI_IOMUL_DISABLE_IO:
++ error = pci_iomul_disable_io(iomul);
++ break;
++ case PCI_IOMUL_IN:
++ error = pci_iomul_in(iomul, (struct pci_iomul_in __user *)arg);
++ break;
++ case PCI_IOMUL_OUT:
++ error = pci_iomul_out(iomul,
++ (struct pci_iomul_out __user *)arg);
++ break;
++ default:
++ error = -ENOSYS;
++ break;
++ }
++
++ return error;
++}
++
++static const struct file_operations pci_iomul_fops = {
++ .owner = THIS_MODULE,
++
++ .open = pci_iomul_open, /* nonseekable_open */
++ .release = pci_iomul_release,
++
++ .unlocked_ioctl = pci_iomul_ioctl,
++};
++
++static struct miscdevice pci_iomul_miscdev = {
++ .minor = MISC_DYNAMIC_MINOR,
++ .name = "pci_iomul",
++ .fops = &pci_iomul_fops,
++};
++
++static int pci_iomul_init(void)
++{
++ int error;
++ error = misc_register(&pci_iomul_miscdev);
++ if (error != 0) {
++ printk(KERN_ALERT "Couldn't register /dev/misc/pci_iomul");
++ return error;
++ }
++ printk("PCI IO multiplexer device installed.\n");
++ return 0;
++}
++
++#if 0
++static void pci_iomul_cleanup(void)
++{
++ misc_deregister(&pci_iomul_miscdev);
++}
++#endif
++
++/*
++ * This must be called after pci fixup final which is called by
++ * device_initcall(pci_init).
++ */
++late_initcall(pci_iomul_init);
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Isaku Yamahata <yamahata@valinux.co.jp>");
++MODULE_DESCRIPTION("PCI IO space multiplexing driver");
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ head-2009-05-29/drivers/pci/iomulti.h 2009-05-29 10:54:12.000000000 +0200
+@@ -0,0 +1,51 @@
++#ifndef PCI_IOMULTI_H
++#define PCI_IOMULTI_H
++/*
++ * 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, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++ *
++ * Copyright (c) 2009 Isaku Yamahata
++ * VA Linux Systems Japan K.K.
++ *
++ */
++
++struct pci_iomul_setup {
++ uint16_t segment;
++ uint8_t bus;
++ uint8_t dev;
++ uint8_t func;
++};
++
++struct pci_iomul_in {
++ uint8_t bar;
++ uint64_t offset;
++
++ uint8_t size;
++ uint32_t value;
++};
++
++struct pci_iomul_out {
++ uint8_t bar;
++ uint64_t offset;
++
++ uint8_t size;
++ uint32_t value;
++};
++
++#define PCI_IOMUL_SETUP _IOW ('P', 0, struct pci_iomul_setup)
++#define PCI_IOMUL_DISABLE_IO _IO ('P', 1)
++#define PCI_IOMUL_IN _IOWR('P', 2, struct pci_iomul_in)
++#define PCI_IOMUL_OUT _IOW ('P', 3, struct pci_iomul_out)
++
++#endif /* PCI_IOMULTI_H */
+--- head-2009-05-29.orig/drivers/pci/pci.c 2009-05-29 15:08:50.000000000 +0200
++++ head-2009-05-29/drivers/pci/pci.c 2009-05-29 10:52:18.000000000 +0200
+@@ -2490,6 +2490,13 @@ resource_size_t pci_specified_resource_a
*/
int pci_is_reassigndev(struct pci_dev *dev)
{
@@ -987,19 +2580,22 @@ Acked-by: jbeulich@novell.com
return (pci_specified_resource_alignment(dev) != 0);
}
---- head-2009-05-19.orig/drivers/pci/pci.h 2009-05-19 09:37:31.000000000 +0200
-+++ head-2009-05-19/drivers/pci/pci.h 2009-05-19 09:42:46.000000000 +0200
-@@ -259,4 +259,8 @@ static inline int pci_iov_bus_range(stru
+--- head-2009-05-29.orig/drivers/pci/pci.h 2009-05-29 15:08:50.000000000 +0200
++++ head-2009-05-29/drivers/pci/pci.h 2009-05-29 11:12:33.000000000 +0200
+@@ -259,4 +259,11 @@ static inline int pci_iov_bus_range(stru
}
#endif /* CONFIG_PCI_IOV */
+#ifdef CONFIG_PCI_GUESTDEV
-+int pci_is_guestdev_to_reassign(struct pci_dev *dev);
-+#endif /* CONFIG_PCI_GUESTDEV */
++extern int pci_is_guestdev_to_reassign(struct pci_dev *dev);
++extern int pci_is_iomuldev(struct pci_dev *dev);
++#else
++#define pci_is_iomuldev(dev) 0
++#endif
+
#endif /* DRIVERS_PCI_H */
---- head-2009-05-19.orig/include/linux/acpi.h 2009-05-19 09:37:31.000000000 +0200
-+++ head-2009-05-19/include/linux/acpi.h 2009-05-19 09:42:46.000000000 +0200
+--- head-2009-05-29.orig/include/linux/acpi.h 2009-05-29 15:08:50.000000000 +0200
++++ head-2009-05-29/include/linux/acpi.h 2009-05-29 10:52:18.000000000 +0200
@@ -254,6 +254,8 @@ int acpi_check_region(resource_size_t st
int acpi_check_mem_region(resource_size_t start, resource_size_t n,
const char *name);
@@ -1009,15 +2605,17 @@ Acked-by: jbeulich@novell.com
#ifdef CONFIG_PM_SLEEP
void __init acpi_no_s4_hw_signature(void);
void __init acpi_old_suspend_ordering(void);
---- head-2009-05-19.orig/include/linux/pci.h 2009-05-19 09:37:31.000000000 +0200
-+++ head-2009-05-19/include/linux/pci.h 2009-05-19 09:42:46.000000000 +0200
-@@ -1253,5 +1253,9 @@ static inline irqreturn_t pci_sriov_migr
+--- head-2009-05-29.orig/include/linux/pci.h 2009-05-29 15:08:50.000000000 +0200
++++ head-2009-05-29/include/linux/pci.h 2009-05-29 11:08:42.000000000 +0200
+@@ -1253,5 +1253,11 @@ static inline irqreturn_t pci_sriov_migr
}
#endif
+#ifdef CONFIG_PCI_GUESTDEV
+int pci_is_guestdev(struct pci_dev *dev);
-+#endif /* CONFIG_PCI_GUESTDEV */
++#else
++#define pci_is_guestdev(dev) 0
++#endif
+
#endif /* __KERNEL__ */
#endif /* LINUX_PCI_H */
diff --git a/patches.xen/pci-reserve b/patches.xen/pci-reserve
new file mode 100644
index 0000000000..7888ae2a93
--- /dev/null
+++ b/patches.xen/pci-reserve
@@ -0,0 +1,250 @@
+Subject: linux/pci: reserve io/memory space for bridge
+From: http://xenbits.xensource.com/linux-2.6.18-xen.hg (tip 898:ca12928cdafe)
+Patch-mainline: obsolete
+
+reserve io/memory space for bridge which will be used later
+by PCI hotplug.
+
+Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
+Acked-by: jbeulich@novell.com
+
+--- head-2009-05-29.orig/Documentation/kernel-parameters.txt 2009-05-29 10:58:23.000000000 +0200
++++ head-2009-05-29/Documentation/kernel-parameters.txt 2009-05-29 11:21:22.000000000 +0200
+@@ -1857,6 +1857,13 @@ and is between 256 and 4096 characters.
+ PCI-PCI bridge can be specified, if resource
+ windows need to be expanded.
+
++ pci_reserve= [PCI]
++ Format: [<sbdf>[+IO<size>][+MEM<size>]][,<sbdf>...]
++ Format of sbdf: [<segment>:]<bus>:<dev>.<func>
++ Specifies the least reserved io size or memory size
++ which is assigned to PCI bridge even when no child
++ pci device exists. This is useful with PCI hotplug.
++
+ pcie_aspm= [PCIE] Forcibly enable or disable PCIe Active State Power
+ Management.
+ off Disable ASPM.
+--- head-2009-05-29.orig/drivers/pci/Kconfig 2009-05-29 10:55:55.000000000 +0200
++++ head-2009-05-29/drivers/pci/Kconfig 2009-05-29 11:22:09.000000000 +0200
+@@ -56,6 +56,13 @@ config PCI_IOMULTI
+ help
+ Say Y here if you need io multiplexing.
+
++config PCI_RESERVE
++ bool "PCI IO/MEMORY space reserve"
++ depends on PCI && XEN_PRIVILEGED_GUEST
++ default y
++ help
++ Say Y here if you need PCI IO/MEMORY space reserve
++
+ config PCI_STUB
+ tristate "PCI Stub driver"
+ depends on PCI
+--- head-2009-05-29.orig/drivers/pci/Makefile 2009-05-29 10:54:12.000000000 +0200
++++ head-2009-05-29/drivers/pci/Makefile 2009-05-29 11:20:43.000000000 +0200
+@@ -8,6 +8,7 @@ obj-y += access.o bus.o probe.o remove.
+ obj-$(CONFIG_PROC_FS) += proc.o
+ obj-$(CONFIG_PCI_GUESTDEV) += guestdev.o
+ obj-$(CONFIG_PCI_IOMULTI) += iomulti.o
++obj-$(CONFIG_PCI_RESERVE) += reserve.o
+
+ # Build PCI Express stuff if needed
+ obj-$(CONFIG_PCIEPORTBUS) += pcie/
+--- head-2009-05-29.orig/drivers/pci/pci.h 2009-05-29 11:12:33.000000000 +0200
++++ head-2009-05-29/drivers/pci/pci.h 2009-05-29 11:22:49.000000000 +0200
+@@ -266,4 +266,19 @@ extern int pci_is_iomuldev(struct pci_de
+ #define pci_is_iomuldev(dev) 0
+ #endif
+
++#ifdef CONFIG_PCI_RESERVE
++unsigned long pci_reserve_size_io(struct pci_bus *bus);
++unsigned long pci_reserve_size_mem(struct pci_bus *bus);
++#else
++static inline unsigned long pci_reserve_size_io(struct pci_bus *bus)
++{
++ return 0;
++}
++
++static inline unsigned long pci_reserve_size_mem(struct pci_bus *bus)
++{
++ return 0;
++}
++#endif /* CONFIG_PCI_RESERVE */
++
+ #endif /* DRIVERS_PCI_H */
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ head-2009-05-29/drivers/pci/reserve.c 2009-05-29 11:20:43.000000000 +0200
+@@ -0,0 +1,143 @@
++/*
++ * 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, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++ *
++ * Copyright (c) 2009 Isaku Yamahata
++ * VA Linux Systems Japan K.K.
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/pci.h>
++
++#include <asm/setup.h>
++
++static char pci_reserve_param[COMMAND_LINE_SIZE];
++
++/* pci_reserve= [PCI]
++ * Format: [<sbdf>[+IO<size>][+MEM<size>]][,<sbdf>...]
++ * Format of sbdf: [<segment>:]<bus>:<dev>.<func>
++ */
++static int pci_reserve_parse_size(const char *str,
++ unsigned long *io_size,
++ unsigned long *mem_size)
++{
++ if (sscanf(str, "io%lx", io_size) == 1 ||
++ sscanf(str, "IO%lx", io_size) == 1)
++ return 0;
++
++ if (sscanf(str, "mem%lx", mem_size) == 1 ||
++ sscanf(str, "MEM%lx", mem_size) == 1)
++ return 0;
++
++ return -EINVAL;
++}
++
++static int pci_reserve_parse_one(const char *str,
++ int *seg, int *bus, int *dev, int *func,
++ unsigned long *io_size,
++ unsigned long *mem_size)
++{
++ char *p;
++
++ *io_size = 0;
++ *mem_size = 0;
++
++ if (sscanf(str, "%x:%x:%x.%x", seg, bus, dev, func) != 4) {
++ *seg = 0;
++ if (sscanf(str, "%x:%x.%x", bus, dev, func) != 3) {
++ return -EINVAL;
++ }
++ }
++
++ p = strchr(str, '+');
++ if (p == NULL)
++ return -EINVAL;
++ p++;
++ if (pci_reserve_parse_size(p, io_size, mem_size))
++ return -EINVAL;
++
++ p = strchr(str, '+');
++ if (p != NULL) {
++ p++;
++ pci_reserve_parse_size(p, io_size, mem_size);
++ }
++ return 0;
++}
++
++static unsigned long pci_reserve_size(struct pci_bus *pbus, int flags)
++{
++ char *sp;
++ char *ep;
++
++ int seg;
++ int bus;
++ int dev;
++ int func;
++
++ unsigned long io_size;
++ unsigned long mem_size;
++
++ sp = pci_reserve_param;
++
++ do {
++ ep = strchr(sp, ',');
++ if (ep)
++ *ep = '\0'; /* chomp */
++
++ if (pci_reserve_parse_one(sp, &seg, &bus, &dev, &func,
++ &io_size, &mem_size) == 0) {
++ if (pci_domain_nr(pbus) == seg &&
++ pbus->number == bus &&
++ PCI_SLOT(pbus->self->devfn) == dev &&
++ PCI_FUNC(pbus->self->devfn) == func) {
++ switch (flags) {
++ case IORESOURCE_IO:
++ return io_size;
++ case IORESOURCE_MEM:
++ return mem_size;
++ default:
++ break;
++ }
++ }
++ }
++
++ if (ep) {
++ *ep = ','; /* restore chomp'ed ',' for later */
++ ep++;
++ }
++ sp = ep;
++ } while (ep);
++
++ return 0;
++}
++
++unsigned long pci_reserve_size_io(struct pci_bus *pbus)
++{
++ return pci_reserve_size(pbus, IORESOURCE_IO);
++}
++
++unsigned long pci_reserve_size_mem(struct pci_bus *pbus)
++{
++ return pci_reserve_size(pbus, IORESOURCE_MEM);
++}
++
++static int __init pci_reserve_setup(char *str)
++{
++ if (strlen(str) >= sizeof(pci_reserve_param))
++ return 0;
++ strlcpy(pci_reserve_param, str, sizeof(pci_reserve_param));
++ return 1;
++}
++__setup("pci_reserve=", pci_reserve_setup);
+--- head-2009-05-29.orig/drivers/pci/setup-bus.c 2009-05-29 15:00:30.000000000 +0200
++++ head-2009-05-29/drivers/pci/setup-bus.c 2009-05-29 15:02:02.000000000 +0200
+@@ -25,7 +25,7 @@
+ #include <linux/ioport.h>
+ #include <linux/cache.h>
+ #include <linux/slab.h>
+-
++#include "pci.h"
+
+ static void pbus_assign_resources_sorted(const struct pci_bus *bus)
+ {
+@@ -316,7 +316,7 @@ static void pbus_size_io(struct pci_bus
+ #if defined(CONFIG_ISA) || defined(CONFIG_EISA)
+ size = (size & 0xff) + ((size & ~0xffUL) << 2);
+ #endif
+- size = ALIGN(size + size1, 4096);
++ size = ALIGN(max(size + size1, pci_reserve_size_io(bus)), 4096);
+ if (!size) {
+ b_res->flags = 0;
+ return;
+@@ -388,7 +388,8 @@ static int pbus_size_mem(struct pci_bus
+ min_align = align1 >> 1;
+ align += aligns[order];
+ }
+- size = ALIGN(size, min_align);
++ size = ALIGN(max(size, (resource_size_t)pci_reserve_size_mem(bus)),
++ min_align);
+ if (!size) {
+ b_res->flags = 0;
+ return 1;
diff --git a/patches.xen/xen-balloon-max-target b/patches.xen/xen-balloon-max-target
index 5ed2f647e8..d4f0770a52 100644
--- a/patches.xen/xen-balloon-max-target
+++ b/patches.xen/xen-balloon-max-target
@@ -5,8 +5,8 @@ References: 152667, 184727
jb: Also added this to the sysfs representation.
---- head-2009-02-06.orig/drivers/xen/balloon/balloon.c 2009-02-06 17:31:38.000000000 +0100
-+++ head-2009-02-06/drivers/xen/balloon/balloon.c 2009-02-12 14:12:16.000000000 +0100
+--- head-2009-06-09.orig/drivers/xen/balloon/balloon.c 2009-06-09 15:36:07.000000000 +0200
++++ head-2009-06-09/drivers/xen/balloon/balloon.c 2009-06-09 15:49:56.000000000 +0200
@@ -194,7 +194,7 @@ static unsigned long current_target(void
return target;
}
@@ -16,16 +16,16 @@ jb: Also added this to the sysfs representation.
{
#ifndef CONFIG_XEN
#define max_pfn num_physpages
-@@ -421,7 +421,7 @@ void balloon_set_new_target(unsigned lon
+@@ -406,7 +406,7 @@ static void balloon_process(struct work_
+ void balloon_set_new_target(unsigned long target)
{
/* No need for lock. Not read-modify-write updates. */
- bs.hard_limit = ~0UL;
- bs.target_pages = max(target, minimum_target());
+ bs.target_pages = max(target, balloon_minimum_target());
schedule_work(&balloon_worker);
}
-@@ -496,11 +496,14 @@ static int balloon_read(char *page, char
+@@ -481,10 +481,13 @@ static int balloon_read(char *page, char
page,
"Current allocation: %8lu kB\n"
"Requested target: %8lu kB\n"
@@ -33,16 +33,15 @@ jb: Also added this to the sysfs representation.
+ "Maximum target: %8lu kB\n"
"Low-mem balloon: %8lu kB\n"
"High-mem balloon: %8lu kB\n"
- "Driver pages: %8lu kB\n"
- "Xen hard limit: ",
+ "Driver pages: %8lu kB\n",
PAGES2KB(bs.current_pages), PAGES2KB(bs.target_pages),
+ PAGES2KB(balloon_minimum_target()), PAGES2KB(num_physpages),
PAGES2KB(bs.balloon_low), PAGES2KB(bs.balloon_high),
PAGES2KB(bs.driver_pages));
---- head-2009-02-06.orig/drivers/xen/balloon/common.h 2007-06-12 13:13:44.000000000 +0200
-+++ head-2009-02-06/drivers/xen/balloon/common.h 2009-02-12 14:12:16.000000000 +0100
-@@ -47,6 +47,7 @@ struct balloon_stats {
+--- head-2009-06-09.orig/drivers/xen/balloon/common.h 2009-06-09 15:01:37.000000000 +0200
++++ head-2009-06-09/drivers/xen/balloon/common.h 2009-06-09 15:48:02.000000000 +0200
+@@ -45,6 +45,7 @@ struct balloon_stats {
unsigned long balloon_high;
};
@@ -50,15 +49,15 @@ jb: Also added this to the sysfs representation.
extern struct balloon_stats balloon_stats;
#define bs balloon_stats
-@@ -54,5 +55,6 @@ int balloon_sysfs_init(void);
+@@ -52,5 +53,6 @@ int balloon_sysfs_init(void);
void balloon_sysfs_exit(void);
void balloon_set_new_target(unsigned long target);
+unsigned long balloon_minimum_target(void);
#endif /* __XEN_BALLOON_COMMON_H__ */
---- head-2009-02-06.orig/drivers/xen/balloon/sysfs.c 2009-02-11 18:18:14.000000000 +0100
-+++ head-2009-02-06/drivers/xen/balloon/sysfs.c 2009-02-12 14:12:16.000000000 +0100
+--- head-2009-06-09.orig/drivers/xen/balloon/sysfs.c 2009-06-09 15:43:55.000000000 +0200
++++ head-2009-06-09/drivers/xen/balloon/sysfs.c 2009-06-09 15:48:02.000000000 +0200
@@ -53,6 +53,8 @@
static SYSDEV_ATTR(name, S_IRUGO, show_##name, NULL)
@@ -67,8 +66,8 @@ jb: Also added this to the sysfs representation.
+BALLOON_SHOW(max_kb, "%lu\n", PAGES2KB(num_physpages));
BALLOON_SHOW(low_kb, "%lu\n", PAGES2KB(bs.balloon_low));
BALLOON_SHOW(high_kb, "%lu\n", PAGES2KB(bs.balloon_high));
- BALLOON_SHOW(hard_limit_kb,
-@@ -126,6 +128,8 @@ static struct sysdev_attribute *balloon_
+ BALLOON_SHOW(driver_kb, "%lu\n", PAGES2KB(bs.driver_pages));
+@@ -123,6 +125,8 @@ static struct sysdev_attribute *balloon_
static struct attribute *balloon_info_attrs[] = {
&attr_current_kb.attr,
@@ -76,4 +75,4 @@ jb: Also added this to the sysfs representation.
+ &attr_max_kb.attr,
&attr_low_kb.attr,
&attr_high_kb.attr,
- &attr_hard_limit_kb.attr,
+ &attr_driver_kb.attr,
diff --git a/patches.xen/xen-blkback-cdrom b/patches.xen/xen-blkback-cdrom
index c57246db0a..08fba8da58 100644
--- a/patches.xen/xen-blkback-cdrom
+++ b/patches.xen/xen-blkback-cdrom
@@ -3,15 +3,16 @@ From: plc@novell.com
Patch-mainline: obsolete
References: 159907
---- head-2009-02-06.orig/drivers/xen/blkback/Makefile 2009-02-16 10:21:49.000000000 +0100
-+++ head-2009-02-06/drivers/xen/blkback/Makefile 2008-05-08 15:05:13.000000000 +0200
-@@ -1,3 +1,3 @@
+--- head-2009-06-09.orig/drivers/xen/blkback/Makefile 2009-06-09 15:01:37.000000000 +0200
++++ head-2009-06-09/drivers/xen/blkback/Makefile 2009-06-09 15:50:31.000000000 +0200
+@@ -1,4 +1,4 @@
obj-$(CONFIG_XEN_BLKDEV_BACKEND) := blkbk.o
+ obj-$(CONFIG_XEN_BLKBACK_PAGEMAP) += blkback-pagemap.o
-blkbk-y := blkback.o xenbus.o interface.o vbd.o
+blkbk-y := blkback.o xenbus.o interface.o vbd.o cdrom.o
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-02-06/drivers/xen/blkback/cdrom.c 2008-05-13 15:34:40.000000000 +0200
++++ head-2009-06-09/drivers/xen/blkback/cdrom.c 2009-06-09 15:50:31.000000000 +0200
@@ -0,0 +1,162 @@
+/******************************************************************************
+ * blkback/cdrom.c
@@ -175,9 +176,9 @@ References: 159907
+ }
+ }
+}
---- head-2009-02-06.orig/drivers/xen/blkback/common.h 2009-02-06 17:32:58.000000000 +0100
-+++ head-2009-02-06/drivers/xen/blkback/common.h 2008-05-13 15:35:13.000000000 +0200
-@@ -96,6 +96,17 @@ typedef struct blkif_st {
+--- head-2009-06-09.orig/drivers/xen/blkback/common.h 2009-06-09 15:37:17.000000000 +0200
++++ head-2009-06-09/drivers/xen/blkback/common.h 2009-06-09 15:50:31.000000000 +0200
+@@ -98,6 +98,17 @@ typedef struct blkif_st {
grant_ref_t shmem_ref;
} blkif_t;
@@ -195,7 +196,7 @@ References: 159907
blkif_t *blkif_alloc(domid_t domid);
void blkif_disconnect(blkif_t *blkif);
void blkif_free(blkif_t *blkif);
-@@ -136,4 +147,7 @@ int blkif_schedule(void *arg);
+@@ -138,4 +149,7 @@ int blkif_schedule(void *arg);
int blkback_barrier(struct xenbus_transaction xbt,
struct backend_info *be, int state);
@@ -203,8 +204,8 @@ References: 159907
+void cdrom_add_media_watch(struct backend_info *be);
+
#endif /* __BLKIF__BACKEND__COMMON_H__ */
---- head-2009-02-06.orig/drivers/xen/blkback/vbd.c 2009-02-16 10:31:49.000000000 +0100
-+++ head-2009-02-06/drivers/xen/blkback/vbd.c 2008-05-08 15:05:13.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/blkback/vbd.c 2009-06-09 15:43:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/blkback/vbd.c 2009-06-09 15:50:31.000000000 +0200
@@ -107,6 +107,9 @@ int vbd_translate(struct phys_req *req,
if ((operation != READ) && vbd->readonly)
goto out;
@@ -215,8 +216,8 @@ References: 159907
if (unlikely((req->sector_number + req->nr_sects) > vbd_sz(vbd)))
goto out;
---- head-2009-02-06.orig/drivers/xen/blkback/xenbus.c 2008-09-15 15:10:39.000000000 +0200
-+++ head-2009-02-06/drivers/xen/blkback/xenbus.c 2008-05-08 15:05:13.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/blkback/xenbus.c 2009-06-09 15:50:30.000000000 +0200
++++ head-2009-06-09/drivers/xen/blkback/xenbus.c 2009-06-09 15:50:31.000000000 +0200
@@ -28,16 +28,6 @@
pr_debug("blkback/xenbus (%s:%d) " fmt ".\n", \
__FUNCTION__, __LINE__, ##args)
diff --git a/patches.xen/xen-configurable-guest-devices b/patches.xen/xen-configurable-guest-devices
index 61fb37da30..750196d2f7 100644
--- a/patches.xen/xen-configurable-guest-devices
+++ b/patches.xen/xen-configurable-guest-devices
@@ -7,8 +7,8 @@ value).
Similarly, allow the number of simultaneous transmits in netback to be
configurable.
---- head-2009-04-21.orig/arch/x86/include/mach-xen/asm/irq_vectors.h 2009-04-27 15:13:44.000000000 +0200
-+++ head-2009-04-21/arch/x86/include/mach-xen/asm/irq_vectors.h 2009-04-27 15:14:07.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/irq_vectors.h 2009-06-09 15:44:02.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/irq_vectors.h 2009-06-09 15:52:02.000000000 +0200
@@ -75,7 +75,7 @@ static inline int invalid_vm86_irq(int i
#endif
@@ -18,9 +18,9 @@ configurable.
#define NR_IRQS (NR_PIRQS + NR_DYNIRQS)
---- head-2009-04-21.orig/drivers/xen/Kconfig 2009-04-24 16:46:12.000000000 +0200
-+++ head-2009-04-21/drivers/xen/Kconfig 2009-04-28 18:44:54.000000000 +0200
-@@ -73,6 +73,15 @@ config XEN_NETDEV_BACKEND
+--- head-2009-06-09.orig/drivers/xen/Kconfig 2009-06-09 15:51:56.000000000 +0200
++++ head-2009-06-09/drivers/xen/Kconfig 2009-06-09 15:52:02.000000000 +0200
+@@ -90,6 +90,15 @@ config XEN_NETDEV_BACKEND
network devices to other guests via a high-performance shared-memory
interface.
@@ -36,7 +36,7 @@ configurable.
config XEN_NETDEV_PIPELINED_TRANSMITTER
bool "Pipelined transmitter (DANGEROUS)"
depends on XEN_NETDEV_BACKEND
-@@ -277,6 +286,16 @@ config XEN_SYSFS
+@@ -294,6 +303,16 @@ config XEN_SYSFS
help
Xen hypervisor attributes will show up under /sys/hypervisor/.
@@ -53,8 +53,8 @@ configurable.
choice
prompt "Xen version compatibility"
default XEN_COMPAT_030002_AND_LATER
---- head-2009-04-21.orig/drivers/xen/netback/netback.c 2009-04-24 17:00:54.000000000 +0200
-+++ head-2009-04-21/drivers/xen/netback/netback.c 2009-04-24 17:01:01.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/netback/netback.c 2009-06-09 15:52:00.000000000 +0200
++++ head-2009-06-09/drivers/xen/netback/netback.c 2009-06-09 15:52:02.000000000 +0200
@@ -71,7 +71,7 @@ static DECLARE_TASKLET(net_rx_tasklet, n
static struct timer_list net_timer;
static struct timer_list netbk_tx_pending_timer;
@@ -64,7 +64,7 @@ configurable.
static struct sk_buff_head rx_queue;
-@@ -1216,6 +1216,7 @@ static void net_tx_action(unsigned long
+@@ -1241,6 +1241,7 @@ static void net_tx_action(unsigned long
net_tx_action_dealloc();
mop = tx_map_ops;
diff --git a/patches.xen/xen-ipi-per-cpu-irq b/patches.xen/xen-ipi-per-cpu-irq
index 3583a4ee45..f4d9648d65 100644
--- a/patches.xen/xen-ipi-per-cpu-irq
+++ b/patches.xen/xen-ipi-per-cpu-irq
@@ -2,8 +2,8 @@ From: jbeulich@novell.com
Subject: fold IPIs onto a single IRQ each
Patch-mainline: obsolete
---- head-2009-05-04.orig/arch/x86/kernel/apic/ipi-xen.c 2009-05-04 11:19:12.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/apic/ipi-xen.c 2009-04-24 16:48:56.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/apic/ipi-xen.c 2009-06-09 15:44:02.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/apic/ipi-xen.c 2009-06-09 15:51:56.000000000 +0200
@@ -21,31 +21,22 @@
#include <xen/evtchn.h>
@@ -57,8 +57,8 @@ Patch-mainline: obsolete
local_irq_restore(flags);
}
---- head-2009-05-04.orig/arch/x86/kernel/irq_32-xen.c 2009-05-04 11:19:12.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/irq_32-xen.c 2009-04-24 16:46:12.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/irq_32-xen.c 2009-06-09 15:44:02.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/irq_32-xen.c 2009-06-09 15:51:56.000000000 +0200
@@ -228,6 +228,8 @@ void fixup_irqs(void)
continue;
if (irq == 2)
@@ -68,8 +68,8 @@ Patch-mainline: obsolete
affinity = desc->affinity;
if (cpumask_any_and(affinity, cpu_online_mask) >= nr_cpu_ids) {
---- head-2009-05-04.orig/arch/x86/kernel/irq_64-xen.c 2009-05-04 11:19:12.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/irq_64-xen.c 2009-04-24 16:46:12.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/irq_64-xen.c 2009-06-09 15:44:02.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/irq_64-xen.c 2009-06-09 15:51:56.000000000 +0200
@@ -85,6 +85,7 @@ void fixup_irqs(void)
affinity = desc->affinity;
@@ -78,8 +78,8 @@ Patch-mainline: obsolete
cpumask_equal(affinity, cpu_online_mask)) {
spin_unlock(&desc->lock);
continue;
---- head-2009-05-04.orig/drivers/xen/Kconfig 2009-04-07 15:56:32.000000000 +0200
-+++ head-2009-05-04/drivers/xen/Kconfig 2009-04-24 16:46:12.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/Kconfig 2009-06-09 15:51:41.000000000 +0200
++++ head-2009-06-09/drivers/xen/Kconfig 2009-06-09 15:51:56.000000000 +0200
@@ -4,6 +4,7 @@
config XEN
@@ -88,7 +88,7 @@ Patch-mainline: obsolete
if XEN
config XEN_INTERFACE_VERSION
-@@ -318,6 +319,9 @@ config HAVE_IRQ_IGNORE_UNHANDLED
+@@ -335,6 +336,9 @@ config HAVE_IRQ_IGNORE_UNHANDLED
config GENERIC_HARDIRQS_NO__DO_IRQ
def_bool y
@@ -98,8 +98,8 @@ Patch-mainline: obsolete
config NO_IDLE_HZ
def_bool y
---- head-2009-05-04.orig/drivers/xen/core/evtchn.c 2009-05-11 14:08:58.000000000 +0200
-+++ head-2009-05-04/drivers/xen/core/evtchn.c 2009-04-24 16:46:12.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/core/evtchn.c 2009-06-09 15:51:55.000000000 +0200
++++ head-2009-06-09/drivers/xen/core/evtchn.c 2009-06-09 15:51:56.000000000 +0200
@@ -59,6 +59,22 @@ static DEFINE_SPINLOCK(irq_mapping_updat
static int evtchn_to_irq[NR_EVENT_CHANNELS] = {
[0 ... NR_EVENT_CHANNELS-1] = -1 };
@@ -507,8 +507,8 @@ Patch-mainline: obsolete
}
static int evtchn_resume(struct sys_device *dev)
---- head-2009-05-04.orig/drivers/xen/core/smpboot.c 2009-04-30 12:30:58.000000000 +0200
-+++ head-2009-05-04/drivers/xen/core/smpboot.c 2009-04-24 16:46:12.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/core/smpboot.c 2009-06-09 15:51:40.000000000 +0200
++++ head-2009-06-09/drivers/xen/core/smpboot.c 2009-06-09 15:51:56.000000000 +0200
@@ -40,12 +40,9 @@ cpumask_var_t vcpu_initialized_mask;
DEFINE_PER_CPU(struct cpuinfo_x86, cpu_info);
EXPORT_PER_CPU_SYMBOL(cpu_info);
@@ -646,8 +646,8 @@ Patch-mainline: obsolete
xen_spinlock_cleanup(cpu);
}
#endif
---- head-2009-05-04.orig/drivers/xen/core/spinlock.c 2009-05-04 11:19:12.000000000 +0200
-+++ head-2009-05-04/drivers/xen/core/spinlock.c 2009-04-24 16:46:12.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/core/spinlock.c 2009-06-09 15:44:02.000000000 +0200
++++ head-2009-06-09/drivers/xen/core/spinlock.c 2009-06-09 15:51:56.000000000 +0200
@@ -14,8 +14,7 @@
#ifdef TICKET_SHIFT
@@ -717,8 +717,8 @@ Patch-mainline: obsolete
return;
}
}
---- head-2009-05-04.orig/include/xen/evtchn.h 2009-05-04 11:30:39.000000000 +0200
-+++ head-2009-05-04/include/xen/evtchn.h 2009-04-24 16:46:12.000000000 +0200
+--- head-2009-06-09.orig/include/xen/evtchn.h 2009-06-09 15:51:55.000000000 +0200
++++ head-2009-06-09/include/xen/evtchn.h 2009-06-09 15:51:56.000000000 +0200
@@ -89,6 +89,8 @@ int bind_virq_to_irqhandler(
unsigned long irqflags,
const char *devname,
diff --git a/patches.xen/xen-kconfig-compat b/patches.xen/xen-kconfig-compat
index 3435543615..7642a7a72e 100644
--- a/patches.xen/xen-kconfig-compat
+++ b/patches.xen/xen-kconfig-compat
@@ -2,9 +2,9 @@ From: jbeulich@novell.com
Subject: add 3.2.0-compatibility configure option
Patch-mainline: obsolete
---- head-2009-04-21.orig/drivers/xen/Kconfig 2009-04-28 18:43:57.000000000 +0200
-+++ head-2009-04-21/drivers/xen/Kconfig 2009-04-07 15:56:32.000000000 +0200
-@@ -289,6 +289,12 @@ choice
+--- head-2009-06-09.orig/drivers/xen/Kconfig 2009-06-09 15:44:02.000000000 +0200
++++ head-2009-06-09/drivers/xen/Kconfig 2009-06-09 15:51:41.000000000 +0200
+@@ -306,6 +306,12 @@ choice
config XEN_COMPAT_030100_AND_LATER
bool "3.1.0 and later"
@@ -17,7 +17,7 @@ Patch-mainline: obsolete
config XEN_COMPAT_LATEST_ONLY
bool "no compatibility code"
-@@ -297,6 +303,8 @@ endchoice
+@@ -314,6 +320,8 @@ endchoice
config XEN_COMPAT
hex
default 0xffffff if XEN_COMPAT_LATEST_ONLY
diff --git a/patches.xen/xen-modular-blktap b/patches.xen/xen-modular-blktap
index c7f5f87342..cbc56a1275 100644
--- a/patches.xen/xen-modular-blktap
+++ b/patches.xen/xen-modular-blktap
@@ -2,10 +2,8 @@ From: ccoffing@novell.com
Subject: Retain backwards-compatible module name with CONFIG_XEN_BLKDEV_TAP=m
Patch-mainline: obsolete
-Index: head-2008-08-18/drivers/xen/blktap/Makefile
-===================================================================
---- head-2008-08-18.orig/drivers/xen/blktap/Makefile 2008-08-21 09:43:30.000000000 +0200
-+++ head-2008-08-18/drivers/xen/blktap/Makefile 2007-04-27 15:30:48.000000000 +0200
+--- head-2009-05-29.orig/drivers/xen/blktap/Makefile 2007-06-12 13:13:44.000000000 +0200
++++ head-2009-05-29/drivers/xen/blktap/Makefile 2009-05-29 12:39:04.000000000 +0200
@@ -1,5 +1,5 @@
LINUXINCLUDE += -I../xen/include/public/io
@@ -14,9 +12,16 @@ Index: head-2008-08-18/drivers/xen/blktap/Makefile
-xenblktap-y := xenbus.o interface.o blktap.o
+blktap-y := xenbus.o interface.o blocktap.o
-Index: head-2008-08-18/drivers/xen/blktap/blocktap.c
-===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2008-08-18/drivers/xen/blktap/blocktap.c 2007-04-27 15:30:48.000000000 +0200
++++ head-2009-05-29/drivers/xen/blktap/blocktap.c 2009-05-29 12:39:04.000000000 +0200
@@ -0,0 +1 @@
+#include "blktap.c"
+--- head-2009-05-29.orig/drivers/xen/blktap2/Makefile 2009-05-29 10:25:53.000000000 +0200
++++ head-2009-05-29/drivers/xen/blktap2/Makefile 2009-05-29 12:39:04.000000000 +0200
+@@ -1,3 +1,4 @@
+-obj-$(CONFIG_XEN_BLKDEV_TAP2) := blktap.o
++obj-$(CONFIG_XEN_BLKDEV_TAP2) := blktap2.o
+
+-blktap-objs := control.o ring.o wait_queue.o device.o request.o sysfs.o
++blktap2-y := control.o ring.o wait_queue.o device.o request.o
++blktap2-$(CONFIG_SYSFS) += sysfs.o
diff --git a/patches.xen/xen-netback-notify-multi b/patches.xen/xen-netback-notify-multi
index 95e39a11bd..9f10626bc3 100644
--- a/patches.xen/xen-netback-notify-multi
+++ b/patches.xen/xen-netback-notify-multi
@@ -5,8 +5,8 @@ Patch-mainline: obsolete
This also does a small fairness improvement since now notifications
get sent in the order requests came in rather than in the inverse one.
---- head-2009-05-04.orig/drivers/xen/core/evtchn.c 2009-05-11 14:10:11.000000000 +0200
-+++ head-2009-05-04/drivers/xen/core/evtchn.c 2009-04-07 15:57:23.000000000 +0200
+--- head-2009-05-29.orig/drivers/xen/core/evtchn.c 2009-05-29 12:40:18.000000000 +0200
++++ head-2009-05-29/drivers/xen/core/evtchn.c 2009-05-29 12:40:23.000000000 +0200
@@ -1327,6 +1327,21 @@ void notify_remote_via_irq(int irq)
}
EXPORT_SYMBOL_GPL(notify_remote_via_irq);
@@ -29,9 +29,9 @@ get sent in the order requests came in rather than in the inverse one.
int irq_to_evtchn_port(int irq)
{
BUG_IF_VIRQ_PER_CPU(irq);
---- head-2009-05-04.orig/drivers/xen/netback/netback.c 2009-03-18 15:57:52.000000000 +0100
-+++ head-2009-05-04/drivers/xen/netback/netback.c 2009-04-07 15:57:23.000000000 +0200
-@@ -748,10 +748,20 @@ static void net_rx_action(unsigned long
+--- head-2009-05-29.orig/drivers/xen/netback/netback.c 2009-05-29 12:40:22.000000000 +0200
++++ head-2009-05-29/drivers/xen/netback/netback.c 2009-05-29 12:40:23.000000000 +0200
+@@ -751,10 +751,20 @@ static void net_rx_action(unsigned long
npo.meta_cons += nr_frags + 1;
}
@@ -54,8 +54,8 @@ get sent in the order requests came in rather than in the inverse one.
}
/* More work to do? */
---- head-2009-05-04.orig/include/xen/evtchn.h 2009-04-24 17:00:54.000000000 +0200
-+++ head-2009-05-04/include/xen/evtchn.h 2009-04-07 15:57:23.000000000 +0200
+--- head-2009-05-29.orig/include/xen/evtchn.h 2009-05-29 12:40:18.000000000 +0200
++++ head-2009-05-29/include/xen/evtchn.h 2009-05-29 12:40:23.000000000 +0200
@@ -190,6 +190,18 @@ static inline void notify_remote_via_evt
VOID(HYPERVISOR_event_channel_op(EVTCHNOP_send, &send));
}
diff --git a/patches.xen/xen-netback-nr-irqs b/patches.xen/xen-netback-nr-irqs
index ddf2a6cb6a..86864802d5 100644
--- a/patches.xen/xen-netback-nr-irqs
+++ b/patches.xen/xen-netback-nr-irqs
@@ -8,8 +8,8 @@ be pretty unbounded. Also, store the dynirq rather than the raw irq
to push up the limit where the type of notify_list needs to become
'int' rather than 'u16'.
---- head-2009-03-18.orig/drivers/xen/netback/interface.c 2009-03-18 10:39:32.000000000 +0100
-+++ head-2009-03-18/drivers/xen/netback/interface.c 2009-03-18 15:57:52.000000000 +0100
+--- head-2009-05-29.orig/drivers/xen/netback/interface.c 2009-05-29 12:22:11.000000000 +0200
++++ head-2009-05-29/drivers/xen/netback/interface.c 2009-05-29 12:40:22.000000000 +0200
@@ -330,6 +330,7 @@ int netif_map(netif_t *netif, unsigned l
netif->dev->name, netif);
if (err < 0)
@@ -18,9 +18,9 @@ to push up the limit where the type of notify_list needs to become
netif->irq = err;
disable_irq(netif->irq);
---- head-2009-03-18.orig/drivers/xen/netback/netback.c 2009-03-18 15:57:48.000000000 +0100
-+++ head-2009-03-18/drivers/xen/netback/netback.c 2009-03-18 15:57:52.000000000 +0100
-@@ -580,8 +580,12 @@ static void net_rx_action(unsigned long
+--- head-2009-05-29.orig/drivers/xen/netback/netback.c 2009-05-29 12:40:20.000000000 +0200
++++ head-2009-05-29/drivers/xen/netback/netback.c 2009-05-29 12:40:22.000000000 +0200
+@@ -583,8 +583,12 @@ static void net_rx_action(unsigned long
static mmu_update_t rx_mmu[NET_RX_RING_SIZE];
static gnttab_transfer_t grant_trans_op[NET_RX_RING_SIZE];
static gnttab_copy_t grant_copy_op[NET_RX_RING_SIZE];
@@ -34,7 +34,7 @@ to push up the limit where the type of notify_list needs to become
static struct netbk_rx_meta meta[NET_RX_RING_SIZE];
struct netrx_pending_operations npo = {
-@@ -730,11 +734,9 @@ static void net_rx_action(unsigned long
+@@ -733,11 +737,9 @@ static void net_rx_action(unsigned long
nr_frags);
RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(&netif->rx, ret);
@@ -48,7 +48,7 @@ to push up the limit where the type of notify_list needs to become
if (netif_queue_stopped(netif->dev) &&
netif_schedulable(netif) &&
-@@ -748,8 +750,8 @@ static void net_rx_action(unsigned long
+@@ -751,8 +753,8 @@ static void net_rx_action(unsigned long
while (notify_nr != 0) {
irq = notify_list[--notify_nr];
diff --git a/patches.xen/xen-op-packet b/patches.xen/xen-op-packet
index 8e46b637ce..f58284cdf7 100644
--- a/patches.xen/xen-op-packet
+++ b/patches.xen/xen-op-packet
@@ -3,9 +3,9 @@ Subject: add support for new operation type BLKIF_OP_PACKET
Patch-mainline: obsolete
References: fate#300964
---- head-2009-05-19.orig/drivers/xen/blkback/blkback.c 2009-05-19 10:38:06.000000000 +0200
-+++ head-2009-05-19/drivers/xen/blkback/blkback.c 2009-05-19 10:10:09.000000000 +0200
-@@ -192,13 +192,15 @@ static void fast_flush_area(pending_req_
+--- head-2009-05-29.orig/drivers/xen/blkback/blkback.c 2009-05-29 12:13:09.000000000 +0200
++++ head-2009-05-29/drivers/xen/blkback/blkback.c 2009-05-29 12:39:55.000000000 +0200
+@@ -193,13 +193,15 @@ static void fast_flush_area(pending_req_
static void print_stats(blkif_t *blkif)
{
@@ -23,7 +23,7 @@ References: fate#300964
}
int blkif_schedule(void *arg)
-@@ -358,6 +360,13 @@ static int do_block_io_op(blkif_t *blkif
+@@ -359,6 +361,13 @@ static int do_block_io_op(blkif_t *blkif
blkif->st_wr_req++;
dispatch_rw_block_io(blkif, &req, pending_req);
break;
@@ -37,9 +37,9 @@ References: fate#300964
default:
/* A good sign something is wrong: sleep for a while to
* avoid excessive CPU consumption by a bad guest. */
---- head-2009-05-19.orig/drivers/xen/blkback/common.h 2008-05-13 15:35:13.000000000 +0200
-+++ head-2009-05-19/drivers/xen/blkback/common.h 2009-05-19 10:10:09.000000000 +0200
-@@ -87,6 +87,7 @@ typedef struct blkif_st {
+--- head-2009-05-29.orig/drivers/xen/blkback/common.h 2009-05-29 12:39:21.000000000 +0200
++++ head-2009-05-29/drivers/xen/blkback/common.h 2009-05-29 12:39:55.000000000 +0200
+@@ -89,6 +89,7 @@ typedef struct blkif_st {
int st_wr_req;
int st_oo_req;
int st_br_req;
@@ -47,8 +47,8 @@ References: fate#300964
int st_rd_sect;
int st_wr_sect;
---- head-2009-05-19.orig/drivers/xen/blkfront/blkfront.c 2009-05-19 10:49:47.000000000 +0200
-+++ head-2009-05-19/drivers/xen/blkfront/blkfront.c 2009-05-19 10:50:18.000000000 +0200
+--- head-2009-05-29.orig/drivers/xen/blkfront/blkfront.c 2009-05-29 12:19:07.000000000 +0200
++++ head-2009-05-29/drivers/xen/blkfront/blkfront.c 2009-05-29 12:39:55.000000000 +0200
@@ -645,6 +645,8 @@ static int blkif_queue_request(struct re
BLKIF_OP_WRITE : BLKIF_OP_READ;
if (blk_barrier_rq(req))
@@ -75,8 +75,8 @@ References: fate#300964
if (unlikely(bret->status != BLKIF_RSP_OKAY))
DPRINTK("Bad return from blkdev data "
"request: %x\n", bret->status);
---- head-2009-05-19.orig/drivers/xen/blktap/blktap.c 2009-05-19 10:10:06.000000000 +0200
-+++ head-2009-05-19/drivers/xen/blktap/blktap.c 2009-05-19 10:10:09.000000000 +0200
+--- head-2009-05-29.orig/drivers/xen/blktap/blktap.c 2009-05-29 12:39:52.000000000 +0200
++++ head-2009-05-29/drivers/xen/blktap/blktap.c 2009-05-29 12:39:55.000000000 +0200
@@ -1129,13 +1129,14 @@ static void fast_flush_area(pending_req_
static void print_stats(blkif_t *blkif)
@@ -115,8 +115,8 @@ References: fate#300964
case BLKIF_OP_READ:
operation = READ;
break;
---- head-2009-05-19.orig/drivers/xen/blktap/common.h 2009-05-19 10:38:06.000000000 +0200
-+++ head-2009-05-19/drivers/xen/blktap/common.h 2009-05-19 10:10:09.000000000 +0200
+--- head-2009-05-29.orig/drivers/xen/blktap/common.h 2009-05-29 12:00:25.000000000 +0200
++++ head-2009-05-29/drivers/xen/blktap/common.h 2009-05-29 12:39:55.000000000 +0200
@@ -75,6 +75,7 @@ typedef struct blkif_st {
int st_rd_req;
int st_wr_req;
@@ -125,8 +125,8 @@ References: fate#300964
int st_rd_sect;
int st_wr_sect;
---- head-2009-05-19.orig/include/xen/interface/io/blkif.h 2009-05-19 10:38:06.000000000 +0200
-+++ head-2009-05-19/include/xen/interface/io/blkif.h 2009-05-19 10:10:09.000000000 +0200
+--- head-2009-05-29.orig/include/xen/interface/io/blkif.h 2009-05-29 11:36:59.000000000 +0200
++++ head-2009-05-29/include/xen/interface/io/blkif.h 2009-05-29 12:39:55.000000000 +0200
@@ -76,6 +76,10 @@
* "feature-flush-cache" node!
*/
diff --git a/patches.xen/xen-virq-per-cpu-irq b/patches.xen/xen-virq-per-cpu-irq
index cdbab36389..038b55a0ce 100644
--- a/patches.xen/xen-virq-per-cpu-irq
+++ b/patches.xen/xen-virq-per-cpu-irq
@@ -2,8 +2,8 @@ From: jbeulich@novell.com
Subject: fold per-CPU VIRQs onto a single IRQ each
Patch-mainline: obsolete
---- head-2009-05-04.orig/arch/x86/kernel/time_32-xen.c 2009-05-04 11:30:39.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/time_32-xen.c 2009-04-24 17:00:54.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/time_32-xen.c 2009-05-29 12:40:14.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/time_32-xen.c 2009-05-29 12:40:18.000000000 +0200
@@ -720,19 +720,17 @@ int xen_update_persistent_clock(void)
}
@@ -69,8 +69,8 @@ Patch-mainline: obsolete
}
#endif
---- head-2009-05-04.orig/drivers/xen/core/evtchn.c 2009-04-24 16:46:12.000000000 +0200
-+++ head-2009-05-04/drivers/xen/core/evtchn.c 2009-05-11 14:10:11.000000000 +0200
+--- head-2009-05-29.orig/drivers/xen/core/evtchn.c 2009-05-29 12:40:14.000000000 +0200
++++ head-2009-05-29/drivers/xen/core/evtchn.c 2009-05-29 12:40:18.000000000 +0200
@@ -59,6 +59,23 @@ static DEFINE_SPINLOCK(irq_mapping_updat
static int evtchn_to_irq[NR_EVENT_CHANNELS] = {
[0 ... NR_EVENT_CHANNELS-1] = -1 };
@@ -497,8 +497,8 @@ Patch-mainline: obsolete
init_evtchn_cpu_bindings();
pirq_needs_eoi = alloc_bootmem_pages(sizeof(unsigned long)
---- head-2009-05-04.orig/drivers/xen/core/smpboot.c 2009-04-24 16:46:12.000000000 +0200
-+++ head-2009-05-04/drivers/xen/core/smpboot.c 2009-04-24 17:00:54.000000000 +0200
+--- head-2009-05-29.orig/drivers/xen/core/smpboot.c 2009-05-29 12:40:14.000000000 +0200
++++ head-2009-05-29/drivers/xen/core/smpboot.c 2009-05-29 12:40:18.000000000 +0200
@@ -154,11 +154,11 @@ static int __cpuinit xen_smp_intr_init(u
fail:
xen_spinlock_cleanup(cpu);
@@ -527,8 +527,8 @@ Patch-mainline: obsolete
xen_spinlock_cleanup(cpu);
}
#endif
---- head-2009-05-04.orig/drivers/xen/core/spinlock.c 2009-04-24 16:46:12.000000000 +0200
-+++ head-2009-05-04/drivers/xen/core/spinlock.c 2009-04-24 17:00:54.000000000 +0200
+--- head-2009-05-29.orig/drivers/xen/core/spinlock.c 2009-05-29 12:40:14.000000000 +0200
++++ head-2009-05-29/drivers/xen/core/spinlock.c 2009-05-29 12:40:18.000000000 +0200
@@ -55,7 +55,7 @@ int __cpuinit xen_spinlock_init(unsigned
void __cpuinit xen_spinlock_cleanup(unsigned int cpu)
@@ -538,9 +538,9 @@ Patch-mainline: obsolete
}
int xen_spin_wait(raw_spinlock_t *lock, unsigned int token)
---- head-2009-05-04.orig/drivers/xen/netback/netback.c 2009-05-04 11:19:12.000000000 +0200
-+++ head-2009-05-04/drivers/xen/netback/netback.c 2009-04-24 17:00:54.000000000 +0200
-@@ -1564,6 +1564,12 @@ static irqreturn_t netif_be_dbg(int irq,
+--- head-2009-05-29.orig/drivers/xen/netback/netback.c 2009-05-29 12:22:11.000000000 +0200
++++ head-2009-05-29/drivers/xen/netback/netback.c 2009-05-29 12:40:18.000000000 +0200
+@@ -1589,6 +1589,12 @@ static irqreturn_t netif_be_dbg(int irq,
return IRQ_HANDLED;
}
@@ -553,7 +553,7 @@ Patch-mainline: obsolete
#endif
static int __init netback_init(void)
-@@ -1623,12 +1629,9 @@ static int __init netback_init(void)
+@@ -1648,12 +1654,9 @@ static int __init netback_init(void)
netif_xenbus_init();
#ifdef NETBE_DEBUG_INTERRUPT
@@ -569,8 +569,8 @@ Patch-mainline: obsolete
#endif
return 0;
---- head-2009-05-04.orig/drivers/xen/xenoprof/xenoprofile.c 2009-05-04 11:19:05.000000000 +0200
-+++ head-2009-05-04/drivers/xen/xenoprof/xenoprofile.c 2009-04-24 17:00:54.000000000 +0200
+--- head-2009-05-29.orig/drivers/xen/xenoprof/xenoprofile.c 2009-05-29 12:19:17.000000000 +0200
++++ head-2009-05-29/drivers/xen/xenoprof/xenoprofile.c 2009-05-29 12:40:18.000000000 +0200
@@ -210,6 +210,11 @@ static irqreturn_t xenoprof_ovf_interrup
return IRQ_HANDLED;
}
@@ -606,8 +606,8 @@ Patch-mainline: obsolete
if (result < 0) {
unbind_virq();
---- head-2009-05-04.orig/include/xen/evtchn.h 2009-04-24 16:46:12.000000000 +0200
-+++ head-2009-05-04/include/xen/evtchn.h 2009-04-24 17:00:54.000000000 +0200
+--- head-2009-05-29.orig/include/xen/evtchn.h 2009-05-29 12:40:14.000000000 +0200
++++ head-2009-05-29/include/xen/evtchn.h 2009-05-29 12:40:18.000000000 +0200
@@ -89,6 +89,17 @@ int bind_virq_to_irqhandler(
unsigned long irqflags,
const char *devname,
diff --git a/patches.xen/xen-x86-dcr-fallback b/patches.xen/xen-x86-dcr-fallback
index a6e36719f8..9bbb090d05 100644
--- a/patches.xen/xen-x86-dcr-fallback
+++ b/patches.xen/xen-x86-dcr-fallback
@@ -6,8 +6,8 @@ References: 181869
This avoids losing precious special memory in places where any memory can be
used.
---- head-2009-05-04.orig/arch/x86/mm/hypervisor.c 2009-05-11 17:03:11.000000000 +0200
-+++ head-2009-05-04/arch/x86/mm/hypervisor.c 2009-04-07 15:57:51.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/mm/hypervisor.c 2009-06-09 15:44:02.000000000 +0200
++++ head-2009-06-09/arch/x86/mm/hypervisor.c 2009-06-09 15:52:17.000000000 +0200
@@ -43,6 +43,7 @@
#include <xen/interface/memory.h>
#include <linux/module.h>
@@ -16,7 +16,7 @@ used.
#include <asm/tlbflush.h>
#include <linux/highmem.h>
-@@ -715,6 +716,83 @@ void xen_destroy_contiguous_region(unsig
+@@ -719,6 +720,83 @@ void xen_destroy_contiguous_region(unsig
BUG();
balloon_unlock(flags);
@@ -100,9 +100,9 @@ used.
}
EXPORT_SYMBOL_GPL(xen_destroy_contiguous_region);
---- head-2009-05-04.orig/drivers/xen/balloon/balloon.c 2009-02-12 14:12:16.000000000 +0100
-+++ head-2009-05-04/drivers/xen/balloon/balloon.c 2009-04-07 15:57:51.000000000 +0200
-@@ -687,7 +687,7 @@ struct page **alloc_empty_pages_and_page
+--- head-2009-06-09.orig/drivers/xen/balloon/balloon.c 2009-06-09 15:49:56.000000000 +0200
++++ head-2009-06-09/drivers/xen/balloon/balloon.c 2009-06-09 15:52:17.000000000 +0200
+@@ -665,7 +665,7 @@ struct page **alloc_empty_pages_and_page
goto out;
}
@@ -111,7 +111,7 @@ used.
{
unsigned long flags;
int i;
-@@ -702,11 +702,24 @@ void free_empty_pages_and_pagevec(struct
+@@ -680,11 +680,24 @@ void free_empty_pages_and_pagevec(struct
}
balloon_unlock(flags);
@@ -137,8 +137,8 @@ used.
void balloon_release_driver_page(struct page *page)
{
unsigned long flags;
---- head-2009-05-04.orig/include/xen/balloon.h 2009-05-11 17:00:23.000000000 +0200
-+++ head-2009-05-04/include/xen/balloon.h 2009-04-07 15:57:51.000000000 +0200
+--- head-2009-06-09.orig/include/xen/balloon.h 2009-06-09 15:41:15.000000000 +0200
++++ head-2009-06-09/include/xen/balloon.h 2009-06-09 15:52:17.000000000 +0200
@@ -47,6 +47,10 @@ void balloon_update_driver_allowance(lon
struct page **alloc_empty_pages_and_pagevec(int nr_pages);
void free_empty_pages_and_pagevec(struct page **pagevec, int nr_pages);
diff --git a/patches.xen/xen-x86-exports b/patches.xen/xen-x86-exports
deleted file mode 100644
index a281ac0726..0000000000
--- a/patches.xen/xen-x86-exports
+++ /dev/null
@@ -1,23 +0,0 @@
-Subject: export a few more symbols
-From: jbeulich@novell.com
-Patch-mainline: obsolete
-References: bnc#458222
-
---- head-2009-05-04.orig/arch/x86/mm/hypervisor.c 2009-05-14 13:58:40.000000000 +0200
-+++ head-2009-05-04/arch/x86/mm/hypervisor.c 2009-05-14 13:59:12.000000000 +0200
-@@ -489,6 +489,7 @@ void xen_tlb_flush_all(void)
- op.cmd = MMUEXT_TLB_FLUSH_ALL;
- BUG_ON(HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF) < 0);
- }
-+EXPORT_SYMBOL_GPL(xen_tlb_flush_all);
-
- void xen_tlb_flush_mask(const cpumask_t *mask)
- {
-@@ -507,6 +508,7 @@ void xen_invlpg_all(unsigned long ptr)
- op.arg1.linear_addr = ptr & PAGE_MASK;
- BUG_ON(HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF) < 0);
- }
-+EXPORT_SYMBOL_GPL(xen_invlpg_all);
-
- void xen_invlpg_mask(const cpumask_t *mask, unsigned long ptr)
- {
diff --git a/patches.xen/xen-x86-pmd-handling b/patches.xen/xen-x86-pmd-handling
index e4f0a56071..0379fd2731 100644
--- a/patches.xen/xen-x86-pmd-handling
+++ b/patches.xen/xen-x86-pmd-handling
@@ -2,8 +2,8 @@ From: jbeulich@novell.com
Subject: consolidate pmd/pud/pgd entry handling
Patch-mainline: obsolete
---- head-2009-05-04.orig/arch/x86/include/mach-xen/asm/hypervisor.h 2009-05-14 13:27:22.000000000 +0200
-+++ head-2009-05-04/arch/x86/include/mach-xen/asm/hypervisor.h 2009-05-14 13:27:51.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/include/mach-xen/asm/hypervisor.h 2009-05-14 13:27:22.000000000 +0200
++++ head-2009-05-29/arch/x86/include/mach-xen/asm/hypervisor.h 2009-05-14 13:27:51.000000000 +0200
@@ -94,10 +94,12 @@ void xen_invlpg(unsigned long ptr);
void xen_l1_entry_update(pte_t *ptr, pte_t val);
void xen_l2_entry_update(pmd_t *ptr, pmd_t val);
@@ -37,8 +37,8 @@ Patch-mainline: obsolete
MULTI_grant_table_op(multicall_entry_t *mcl, unsigned int cmd,
void *uop, unsigned int count)
{
---- head-2009-05-04.orig/arch/x86/include/mach-xen/asm/pgalloc.h 2009-05-04 11:18:58.000000000 +0200
-+++ head-2009-05-04/arch/x86/include/mach-xen/asm/pgalloc.h 2009-04-24 17:21:03.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/include/mach-xen/asm/pgalloc.h 2009-05-29 12:19:07.000000000 +0200
++++ head-2009-05-29/arch/x86/include/mach-xen/asm/pgalloc.h 2009-04-24 17:21:03.000000000 +0200
@@ -64,20 +64,16 @@ static inline void pmd_populate(struct m
struct page *pte)
{
@@ -118,8 +118,8 @@ Patch-mainline: obsolete
}
static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long addr)
---- head-2009-05-04.orig/arch/x86/include/mach-xen/asm/pgtable-3level.h 2009-05-04 11:19:12.000000000 +0200
-+++ head-2009-05-04/arch/x86/include/mach-xen/asm/pgtable-3level.h 2009-04-24 17:22:21.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/include/mach-xen/asm/pgtable-3level.h 2009-05-29 12:22:11.000000000 +0200
++++ head-2009-05-29/arch/x86/include/mach-xen/asm/pgtable-3level.h 2009-04-24 17:22:21.000000000 +0200
@@ -61,12 +61,15 @@ static inline void __xen_pte_clear(pte_t
ptep->pte_high = 0;
}
@@ -156,8 +156,8 @@ Patch-mainline: obsolete
#ifdef CONFIG_SMP
static inline pte_t xen_ptep_get_and_clear(pte_t *ptep, pte_t res)
{
---- head-2009-05-04.orig/arch/x86/include/mach-xen/asm/pgtable_64.h 2009-05-04 11:19:12.000000000 +0200
-+++ head-2009-05-04/arch/x86/include/mach-xen/asm/pgtable_64.h 2009-04-24 17:21:03.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/include/mach-xen/asm/pgtable_64.h 2009-05-29 12:22:11.000000000 +0200
++++ head-2009-05-29/arch/x86/include/mach-xen/asm/pgtable_64.h 2009-04-24 17:21:03.000000000 +0200
@@ -83,33 +83,41 @@ static inline void xen_set_pmd(pmd_t *pm
xen_l2_entry_update(pmdp, pmd);
}
@@ -214,8 +214,8 @@ Patch-mainline: obsolete
#define __pte_mfn(_pte) (((_pte).pte & PTE_PFN_MASK) >> PAGE_SHIFT)
---- head-2009-05-04.orig/arch/x86/mm/hypervisor.c 2009-04-07 15:57:51.000000000 +0200
-+++ head-2009-05-04/arch/x86/mm/hypervisor.c 2009-04-24 17:21:03.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/mm/hypervisor.c 2009-06-03 09:22:53.000000000 +0200
++++ head-2009-05-29/arch/x86/mm/hypervisor.c 2009-06-03 09:23:05.000000000 +0200
@@ -360,31 +360,91 @@ void xen_l1_entry_update(pte_t *ptr, pte
}
EXPORT_SYMBOL_GPL(xen_l1_entry_update);
@@ -315,8 +315,8 @@ Patch-mainline: obsolete
}
#endif /* CONFIG_X86_64 */
---- head-2009-05-04.orig/arch/x86/mm/init_32-xen.c 2009-05-04 11:19:12.000000000 +0200
-+++ head-2009-05-04/arch/x86/mm/init_32-xen.c 2009-04-24 17:21:03.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/mm/init_32-xen.c 2009-05-29 12:22:11.000000000 +0200
++++ head-2009-05-29/arch/x86/mm/init_32-xen.c 2009-04-24 17:21:03.000000000 +0200
@@ -800,6 +800,8 @@ static void __init zone_sizes_init(void)
#endif
@@ -335,8 +335,8 @@ Patch-mainline: obsolete
}
#ifdef CONFIG_MEMORY_HOTPLUG
---- head-2009-05-04.orig/arch/x86/mm/init_64-xen.c 2009-05-06 11:07:47.000000000 +0200
-+++ head-2009-05-04/arch/x86/mm/init_64-xen.c 2009-04-30 08:44:51.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/mm/init_64-xen.c 2009-05-29 12:22:11.000000000 +0200
++++ head-2009-05-29/arch/x86/mm/init_64-xen.c 2009-04-30 08:44:51.000000000 +0200
@@ -236,7 +236,10 @@ static pud_t *fill_pud(pgd_t *pgd, unsig
if (pgd_none(*pgd)) {
pud_t *pud = (pud_t *)spp_getpage();
@@ -394,8 +394,8 @@ Patch-mainline: obsolete
}
#endif
---- head-2009-05-04.orig/arch/x86/mm/pgtable-xen.c 2009-05-14 13:26:38.000000000 +0200
-+++ head-2009-05-04/arch/x86/mm/pgtable-xen.c 2009-05-14 13:27:53.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/mm/pgtable-xen.c 2009-05-29 12:22:11.000000000 +0200
++++ head-2009-05-29/arch/x86/mm/pgtable-xen.c 2009-05-14 13:27:53.000000000 +0200
@@ -42,16 +42,16 @@ pgtable_t pte_alloc_one(struct mm_struct
void __pte_free(pgtable_t pte)
{
diff --git a/patches.xen/xen-x86_64-note-init-p2m b/patches.xen/xen-x86_64-note-init-p2m
index 3ae775fbad..69f8a08d10 100644
--- a/patches.xen/xen-x86_64-note-init-p2m
+++ b/patches.xen/xen-x86_64-note-init-p2m
@@ -18,8 +18,8 @@ shouldn't be as expensive (and hence can be viewed as an optimization
avoiding the spurious page fault on the local CPU), but is required
when the functions are used before the page fault handler gets set up.
---- head-2009-05-19.orig/arch/x86/kernel/head64-xen.c 2009-05-19 09:55:40.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/head64-xen.c 2009-05-19 10:12:54.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/head64-xen.c 2009-05-29 12:22:11.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/head64-xen.c 2009-05-29 12:40:47.000000000 +0200
@@ -124,6 +124,14 @@ void __init x86_64_start_reservations(ch
reserve_early(__pa_symbol(&_text), __pa_symbol(&__bss_stop), "TEXT DATA BSS");
@@ -35,8 +35,8 @@ when the functions are used before the page fault handler gets set up.
/*
* At this point everything still needed from the boot loader
* or BIOS or kernel text should be early reserved or marked not
---- head-2009-05-19.orig/arch/x86/kernel/head_64-xen.S 2009-05-19 10:12:49.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/head_64-xen.S 2009-05-19 10:12:54.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/head_64-xen.S 2009-05-29 12:40:34.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/head_64-xen.S 2009-05-29 12:40:47.000000000 +0200
@@ -18,6 +18,7 @@
#include <asm/desc.h>
#include <asm/segment.h>
@@ -53,8 +53,8 @@ when the functions are used before the page fault handler gets set up.
ELFNOTE(Xen, XEN_ELFNOTE_FEATURES, .asciz "writable_page_tables|writable_descriptor_tables|auto_translated_physmap|pae_pgdir_above_4gb|supervisor_mode_kernel")
ELFNOTE(Xen, XEN_ELFNOTE_LOADER, .asciz "generic")
ELFNOTE(Xen, XEN_ELFNOTE_SUSPEND_CANCEL, .long 1)
---- head-2009-05-19.orig/arch/x86/kernel/setup-xen.c 2009-05-19 10:12:44.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/setup-xen.c 2009-05-19 10:12:54.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/setup-xen.c 2009-05-11 17:04:16.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/setup-xen.c 2009-05-29 12:40:47.000000000 +0200
@@ -1078,7 +1078,7 @@ void __init setup_arch(char **cmdline_p)
difference = xen_start_info->nr_pages - max_pfn;
@@ -156,8 +156,8 @@ when the functions are used before the page fault handler gets set up.
/*
* Initialise the list of the frames that specify the list of
---- head-2009-05-19.orig/arch/x86/mm/init-xen.c 2009-05-19 10:05:22.000000000 +0200
-+++ head-2009-05-19/arch/x86/mm/init-xen.c 2009-05-19 10:12:54.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/mm/init-xen.c 2009-05-19 10:05:22.000000000 +0200
++++ head-2009-05-29/arch/x86/mm/init-xen.c 2009-05-29 12:40:47.000000000 +0200
@@ -363,9 +363,22 @@ unsigned long __init_refok init_memory_m
__flush_tlb_all();
@@ -182,8 +182,8 @@ when the functions are used before the page fault handler gets set up.
if (!after_bootmem)
early_memtest(start, end);
---- head-2009-05-19.orig/arch/x86/mm/init_64-xen.c 2009-05-19 10:12:49.000000000 +0200
-+++ head-2009-05-19/arch/x86/mm/init_64-xen.c 2009-05-19 10:12:54.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/mm/init_64-xen.c 2009-05-29 12:40:34.000000000 +0200
++++ head-2009-05-29/arch/x86/mm/init_64-xen.c 2009-05-29 12:40:47.000000000 +0200
@@ -204,6 +204,17 @@ static int __init nonx32_setup(char *str
}
__setup("noexec32=", nonx32_setup);
@@ -301,9 +301,9 @@ when the functions are used before the page fault handler gets set up.
/* Destroy the Xen-created mappings beyond the kernel image. */
start = PAGE_ALIGN(_brk_end);
end = __START_KERNEL_map + (e820_table_start << PAGE_SHIFT);
---- head-2009-05-19.orig/arch/x86/mm/pageattr-xen.c 2009-05-19 09:55:40.000000000 +0200
-+++ head-2009-05-19/arch/x86/mm/pageattr-xen.c 2009-05-19 10:12:54.000000000 +0200
-@@ -1398,7 +1398,7 @@ static void __make_page_writable(unsigne
+--- head-2009-05-29.orig/arch/x86/mm/pageattr-xen.c 2009-05-29 12:27:07.000000000 +0200
++++ head-2009-05-29/arch/x86/mm/pageattr-xen.c 2009-06-03 09:00:56.000000000 +0200
+@@ -1393,7 +1393,7 @@ static void __make_page_writable(unsigne
pte = lookup_address(va, &level);
BUG_ON(!pte || level != PG_LEVEL_4K);
@@ -312,8 +312,8 @@ when the functions are used before the page fault handler gets set up.
BUG();
if (in_secondary_range(va)) {
unsigned long pfn = pte_pfn(*pte);
---- head-2009-05-19.orig/arch/x86/mm/pgtable-xen.c 2009-05-19 10:12:49.000000000 +0200
-+++ head-2009-05-19/arch/x86/mm/pgtable-xen.c 2009-05-19 10:12:54.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/mm/pgtable-xen.c 2009-05-29 12:40:34.000000000 +0200
++++ head-2009-05-29/arch/x86/mm/pgtable-xen.c 2009-05-29 12:40:47.000000000 +0200
@@ -319,7 +319,7 @@ void __init xen_init_pgd_pin(void)
if (PTRS_PER_PUD > 1) /* not folded */
SetPagePinned(virt_to_page(pud));
@@ -332,8 +332,8 @@ when the functions are used before the page fault handler gets set up.
continue;
SetPagePinned(pmd_page(*pmd));
}
---- head-2009-05-19.orig/arch/x86/mm/pgtable_32-xen.c 2009-05-19 09:55:40.000000000 +0200
-+++ head-2009-05-19/arch/x86/mm/pgtable_32-xen.c 2009-05-19 10:12:54.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/mm/pgtable_32-xen.c 2009-05-29 12:22:11.000000000 +0200
++++ head-2009-05-29/arch/x86/mm/pgtable_32-xen.c 2009-05-29 12:40:47.000000000 +0200
@@ -175,6 +175,6 @@ void make_lowmem_page_writable(void *va,
pte = lookup_address((unsigned long)va, &level);
BUG_ON(!pte || level != PG_LEVEL_4K || !pte_present(*pte));
diff --git a/patches.xen/xen-x86_64-pgd-alloc-order b/patches.xen/xen-x86_64-pgd-alloc-order
index c19fecf323..ce00f62573 100644
--- a/patches.xen/xen-x86_64-pgd-alloc-order
+++ b/patches.xen/xen-x86_64-pgd-alloc-order
@@ -4,8 +4,8 @@ Patch-mainline: obsolete
At the same time remove the useless user mode pair of init_level4_pgt.
---- head-2009-05-04.orig/arch/x86/include/mach-xen/asm/hypervisor.h 2009-05-14 13:28:27.000000000 +0200
-+++ head-2009-05-04/arch/x86/include/mach-xen/asm/hypervisor.h 2009-05-14 13:28:38.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/hypervisor.h 2009-06-09 15:52:30.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/hypervisor.h 2009-06-09 15:52:33.000000000 +0200
@@ -85,8 +85,8 @@ void do_hypervisor_callback(struct pt_re
* be MACHINE addresses.
*/
@@ -26,8 +26,8 @@ At the same time remove the useless user mode pair of init_level4_pgt.
void xen_pgd_pin(pgd_t *);
void xen_pgd_unpin(pgd_t *);
---- head-2009-05-04.orig/arch/x86/include/mach-xen/asm/mmu_context.h 2009-05-04 11:19:12.000000000 +0200
-+++ head-2009-05-04/arch/x86/include/mach-xen/asm/mmu_context.h 2009-04-24 17:29:00.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/mmu_context.h 2009-06-09 15:44:02.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/mmu_context.h 2009-06-09 15:52:33.000000000 +0200
@@ -82,6 +82,9 @@ static inline void switch_mm(struct mm_s
{
unsigned cpu = smp_processor_id();
@@ -62,8 +62,8 @@ At the same time remove the useless user mode pair of init_level4_pgt.
load_LDT_nolock(&next->context);
}
}
---- head-2009-05-04.orig/arch/x86/include/mach-xen/asm/pgalloc.h 2009-04-24 17:21:03.000000000 +0200
-+++ head-2009-05-04/arch/x86/include/mach-xen/asm/pgalloc.h 2009-04-24 17:28:20.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/pgalloc.h 2009-06-09 15:52:26.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/pgalloc.h 2009-06-09 15:52:33.000000000 +0200
@@ -106,15 +106,13 @@ static inline void pud_populate(struct m
#endif /* CONFIG_X86_PAE */
@@ -81,8 +81,8 @@ At the same time remove the useless user mode pair of init_level4_pgt.
else
*__user_pgd(pgd) = *pgd = ent;
}
---- head-2009-05-04.orig/arch/x86/include/mach-xen/asm/pgtable_64.h 2009-04-24 17:21:03.000000000 +0200
-+++ head-2009-05-04/arch/x86/include/mach-xen/asm/pgtable_64.h 2009-04-29 11:43:23.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/pgtable_64.h 2009-06-09 15:52:26.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/pgtable_64.h 2009-06-09 15:52:33.000000000 +0200
@@ -104,18 +104,25 @@ static inline void xen_set_pud(pud_t *pu
: (void)(*__pudp = xen_make_pud(0)); \
})
@@ -112,9 +112,9 @@ At the same time remove the useless user mode pair of init_level4_pgt.
: (void)(*__user_pgd(__pgdp) = *__pgdp = xen_make_pgd(0)); \
})
---- head-2009-05-04.orig/arch/x86/kernel/cpu/common-xen.c 2009-05-04 11:19:12.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/cpu/common-xen.c 2009-04-30 10:50:44.000000000 +0200
-@@ -1005,8 +1005,7 @@ DEFINE_PER_CPU_FIRST(union irq_stack_uni
+--- head-2009-06-09.orig/arch/x86/kernel/cpu/common-xen.c 2009-06-09 15:47:51.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/cpu/common-xen.c 2009-06-09 15:52:33.000000000 +0200
+@@ -1012,8 +1012,7 @@ DEFINE_PER_CPU_FIRST(union irq_stack_uni
void xen_switch_pt(void)
{
#ifdef CONFIG_XEN
@@ -124,8 +124,8 @@ At the same time remove the useless user mode pair of init_level4_pgt.
#endif
}
---- head-2009-05-04.orig/arch/x86/kernel/head_64-xen.S 2009-05-04 11:19:12.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/head_64-xen.S 2009-04-24 17:28:20.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/head_64-xen.S 2009-06-09 15:44:02.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/head_64-xen.S 2009-06-09 15:52:33.000000000 +0200
@@ -57,14 +57,6 @@ ENTRY(name)
NEXT_PAGE(init_level4_pgt)
@@ -141,8 +141,8 @@ At the same time remove the useless user mode pair of init_level4_pgt.
NEXT_PAGE(level3_kernel_pgt)
.fill 512,8,0
---- head-2009-05-04.orig/arch/x86/mm/hypervisor.c 2009-04-24 17:27:44.000000000 +0200
-+++ head-2009-05-04/arch/x86/mm/hypervisor.c 2009-05-06 11:20:26.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/mm/hypervisor.c 2009-06-09 15:52:30.000000000 +0200
++++ head-2009-06-09/arch/x86/mm/hypervisor.c 2009-06-09 15:52:33.000000000 +0200
@@ -426,7 +426,7 @@ void xen_l3_entry_update(pud_t *ptr, pud
#endif
@@ -195,7 +195,7 @@ At the same time remove the useless user mode pair of init_level4_pgt.
void xen_tlb_flush(void)
{
-@@ -532,28 +538,38 @@ void xen_invlpg_mask(cpumask_t *mask, un
+@@ -534,28 +540,38 @@ EXPORT_SYMBOL_GPL(xen_invlpg_mask);
void xen_pgd_pin(pgd_t *pgd)
{
struct mmuext_op op[NR_PGD_PIN_OPS];
@@ -239,8 +239,8 @@ At the same time remove the useless user mode pair of init_level4_pgt.
BUG();
}
---- head-2009-05-04.orig/arch/x86/mm/init_64-xen.c 2009-04-30 08:45:15.000000000 +0200
-+++ head-2009-05-04/arch/x86/mm/init_64-xen.c 2009-05-06 11:19:33.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/mm/init_64-xen.c 2009-06-09 15:52:30.000000000 +0200
++++ head-2009-06-09/arch/x86/mm/init_64-xen.c 2009-06-09 15:52:33.000000000 +0200
@@ -740,9 +740,6 @@ void __init xen_init_pt(void)
__pud(__pa_symbol(level2_kernel_pgt) | _PAGE_TABLE);
memcpy(level2_kernel_pgt, page, PAGE_SIZE);
@@ -260,8 +260,8 @@ At the same time remove the useless user mode pair of init_level4_pgt.
early_make_page_readonly(level3_kernel_pgt,
XENFEAT_writable_page_tables);
early_make_page_readonly(level3_user_pgt,
---- head-2009-05-04.orig/arch/x86/mm/pgtable-xen.c 2009-05-14 13:28:18.000000000 +0200
-+++ head-2009-05-04/arch/x86/mm/pgtable-xen.c 2009-05-14 13:28:42.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/mm/pgtable-xen.c 2009-06-09 15:52:30.000000000 +0200
++++ head-2009-06-09/arch/x86/mm/pgtable-xen.c 2009-06-09 15:52:33.000000000 +0200
@@ -266,9 +266,11 @@ static void pgd_walk(pgd_t *pgd_base, pg
BUG();
seq = 0;
@@ -339,8 +339,8 @@ At the same time remove the useless user mode pair of init_level4_pgt.
}
/* blktap and gntdev need this, as otherwise they would implicitly (and
---- head-2009-05-04.orig/drivers/xen/core/machine_reboot.c 2009-04-24 17:24:52.000000000 +0200
-+++ head-2009-05-04/drivers/xen/core/machine_reboot.c 2009-04-24 17:28:20.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/core/machine_reboot.c 2009-06-09 15:52:27.000000000 +0200
++++ head-2009-06-09/drivers/xen/core/machine_reboot.c 2009-06-09 15:52:33.000000000 +0200
@@ -194,8 +194,7 @@ static int take_machine_down(void *_susp
* in fast-suspend mode as that implies a new enough Xen.
*/
diff --git a/patches.xen/xen-x86_64-pgd-pin b/patches.xen/xen-x86_64-pgd-pin
index e9d7c4ed19..e98b217475 100644
--- a/patches.xen/xen-x86_64-pgd-pin
+++ b/patches.xen/xen-x86_64-pgd-pin
@@ -2,8 +2,8 @@ From: jbeulich@novell.com
Subject: make pinning of pgd pairs transparent to callers
Patch-mainline: obsolete
---- head-2009-05-04.orig/arch/x86/include/mach-xen/asm/hypervisor.h 2009-05-14 13:27:51.000000000 +0200
-+++ head-2009-05-04/arch/x86/include/mach-xen/asm/hypervisor.h 2009-05-14 13:28:27.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/hypervisor.h 2009-06-09 15:52:26.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/hypervisor.h 2009-06-09 15:52:30.000000000 +0200
@@ -95,8 +95,8 @@ void xen_l1_entry_update(pte_t *ptr, pte
void xen_l2_entry_update(pmd_t *ptr, pmd_t val);
void xen_l3_entry_update(pud_t *ptr, pud_t val); /* x86_64/PAE */
@@ -15,9 +15,9 @@ Patch-mainline: obsolete
void xen_init_pgd_pin(void);
---- head-2009-05-04.orig/arch/x86/mm/hypervisor.c 2009-03-06 12:39:43.000000000 +0100
-+++ head-2009-05-04/arch/x86/mm/hypervisor.c 2009-04-24 17:27:44.000000000 +0200
-@@ -523,26 +523,38 @@ void xen_invlpg_mask(cpumask_t *mask, un
+--- head-2009-06-09.orig/arch/x86/mm/hypervisor.c 2009-06-09 15:52:26.000000000 +0200
++++ head-2009-06-09/arch/x86/mm/hypervisor.c 2009-06-09 15:52:30.000000000 +0200
+@@ -525,26 +525,38 @@ EXPORT_SYMBOL_GPL(xen_invlpg_mask);
#endif /* CONFIG_SMP */
@@ -70,8 +70,8 @@ Patch-mainline: obsolete
}
void xen_set_ldt(const void *ptr, unsigned int ents)
---- head-2009-05-04.orig/arch/x86/mm/init_64-xen.c 2009-04-30 08:44:51.000000000 +0200
-+++ head-2009-05-04/arch/x86/mm/init_64-xen.c 2009-04-30 08:45:15.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/mm/init_64-xen.c 2009-06-09 15:52:26.000000000 +0200
++++ head-2009-06-09/arch/x86/mm/init_64-xen.c 2009-06-09 15:52:30.000000000 +0200
@@ -765,10 +765,8 @@ void __init xen_init_pt(void)
early_make_page_readonly(level1_fixmap_pgt,
XENFEAT_writable_page_tables);
@@ -85,8 +85,8 @@ Patch-mainline: obsolete
}
void __init xen_finish_init_mapping(void)
---- head-2009-05-04.orig/arch/x86/mm/pgtable-xen.c 2009-05-14 13:28:09.000000000 +0200
-+++ head-2009-05-04/arch/x86/mm/pgtable-xen.c 2009-05-14 13:28:18.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/mm/pgtable-xen.c 2009-06-09 15:52:29.000000000 +0200
++++ head-2009-06-09/arch/x86/mm/pgtable-xen.c 2009-06-09 15:52:30.000000000 +0200
@@ -343,19 +343,13 @@ static void __pgd_pin(pgd_t *pgd)
{
pgd_walk(pgd, PAGE_KERNEL_RO);
diff --git a/patches.xen/xen3-auto-arch-i386.diff b/patches.xen/xen3-auto-arch-i386.diff
index 98c0a136d6..117f95b341 100644
--- a/patches.xen/xen3-auto-arch-i386.diff
+++ b/patches.xen/xen3-auto-arch-i386.diff
@@ -1,10 +1,10 @@
Subject: xen3 arch-i386
-From: http://xenbits.xensource.com/linux-2.6.18-xen.hg (tip 873:57acc535fd37)
+From: http://xenbits.xensource.com/linux-2.6.18-xen.hg (tip 898:ca12928cdafe)
Patch-mainline: obsolete
Acked-by: jbeulich@novell.com
---- head-2009-05-19.orig/arch/x86/kernel/asm-offsets_32.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/asm-offsets_32.c 2009-05-19 09:44:28.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/asm-offsets_32.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/asm-offsets_32.c 2009-06-09 15:26:38.000000000 +0200
@@ -93,9 +93,14 @@ void foo(void)
OFFSET(pbe_orig_address, pbe, orig_address);
OFFSET(pbe_next, pbe, next);
@@ -21,8 +21,8 @@ Acked-by: jbeulich@novell.com
DEFINE(PAGE_SIZE_asm, PAGE_SIZE);
DEFINE(PAGE_SHIFT_asm, PAGE_SHIFT);
---- head-2009-05-19.orig/arch/x86/kernel/entry_32.S 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/entry_32.S 2009-05-19 09:44:28.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/entry_32.S 2009-06-09 15:21:20.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/entry_32.S 2009-06-09 15:26:38.000000000 +0200
@@ -394,7 +394,7 @@ ENTRY(ia32_sysenter_target)
CFI_SIGNAL_FRAME
CFI_DEF_CFA esp, 0
@@ -50,8 +50,8 @@ Acked-by: jbeulich@novell.com
CFI_DEF_CFA esp, 0
CFI_UNDEFINED eip
pushfl
---- head-2009-05-19.orig/arch/x86/kernel/machine_kexec_32.c 2009-05-19 09:42:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/machine_kexec_32.c 2009-05-19 09:44:28.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/machine_kexec_32.c 2009-06-09 15:21:33.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/machine_kexec_32.c 2009-06-09 15:26:38.000000000 +0200
@@ -26,6 +26,10 @@
#include <asm/system.h>
#include <asm/cacheflush.h>
@@ -135,8 +135,8 @@ Acked-by: jbeulich@novell.com
void arch_crash_save_vmcoreinfo(void)
{
---- head-2009-05-19.orig/arch/x86/kernel/vm86_32.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/vm86_32.c 2009-05-19 09:44:28.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/vm86_32.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/vm86_32.c 2009-06-09 15:26:38.000000000 +0200
@@ -125,7 +125,9 @@ static int copy_vm86_regs_from_user(stru
struct pt_regs *save_v86_state(struct kernel_vm86_regs *regs)
@@ -191,8 +191,8 @@ Acked-by: jbeulich@novell.com
tsk->thread.screen_bitmap = info->screen_bitmap;
if (info->flags & VM86_SCREEN_BITMAP)
---- head-2009-05-19.orig/arch/x86/power/cpu_32.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/arch/x86/power/cpu_32.c 2009-05-19 09:44:28.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/power/cpu_32.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/arch/x86/power/cpu_32.c 2009-06-09 15:26:38.000000000 +0200
@@ -67,6 +67,7 @@ static void do_fpu_end(void)
static void fix_processor_context(void)
@@ -209,8 +209,8 @@ Acked-by: jbeulich@novell.com
load_TR_desc(); /* This does ltr */
load_LDT(&current->active_mm->context); /* This does lldt */
---- head-2009-05-19.orig/arch/x86/vdso/vdso32-setup.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/arch/x86/vdso/vdso32-setup.c 2009-05-19 09:44:28.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/vdso/vdso32-setup.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/arch/x86/vdso/vdso32-setup.c 2009-06-09 15:26:38.000000000 +0200
@@ -26,6 +26,10 @@
#include <asm/vdso.h>
#include <asm/proto.h>
diff --git a/patches.xen/xen3-auto-arch-x86.diff b/patches.xen/xen3-auto-arch-x86.diff
index f58173d7c9..b50a131039 100644
--- a/patches.xen/xen3-auto-arch-x86.diff
+++ b/patches.xen/xen3-auto-arch-x86.diff
@@ -1,5 +1,5 @@
Subject: xen3 arch-x86
-From: http://xenbits.xensource.com/linux-2.6.18-xen.hg (tip 873:57acc535fd37)
+From: http://xenbits.xensource.com/linux-2.6.18-xen.hg (tip 898:ca12928cdafe)
Patch-mainline: obsolete
Acked-by: jbeulich@novell.com
@@ -9,8 +9,8 @@ take the forward porting patches:
2.6.26/arch/x86/kernel/crash.c
2.6.30/arch/x86/kernel/acpi/boot.c
---- head-2009-05-19.orig/arch/x86/Makefile 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/arch/x86/Makefile 2009-05-19 09:44:27.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/Makefile 2009-06-09 15:21:20.000000000 +0200
++++ head-2009-06-09/arch/x86/Makefile 2009-06-09 15:26:37.000000000 +0200
@@ -107,6 +107,10 @@ endif
# prevent gcc from generating any FP code by mistake
KBUILD_CFLAGS += $(call cc-option,-mno-sse -mno-mmx -mno-sse2 -mno-3dnow,)
@@ -58,8 +58,8 @@ take the forward porting patches:
PHONY += install
install:
---- head-2009-05-19.orig/arch/x86/boot/Makefile 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/arch/x86/boot/Makefile 2009-05-19 09:44:27.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/boot/Makefile 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/arch/x86/boot/Makefile 2009-06-09 15:26:37.000000000 +0200
@@ -23,6 +23,7 @@ ROOT_DEV := CURRENT
SVGA_MODE := -DSVGA_MODE=NORMAL_VGA
@@ -83,9 +83,9 @@ take the forward porting patches:
install:
sh $(srctree)/$(src)/install.sh $(KERNELRELEASE) $(obj)/bzImage \
System.map "$(INSTALL_PATH)"
---- head-2009-05-19.orig/arch/x86/kernel/Makefile 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/Makefile 2009-05-19 09:44:27.000000000 +0200
-@@ -108,9 +108,12 @@ obj-$(CONFIG_X86_CHECK_BIOS_CORRUPTION)
+--- head-2009-06-09.orig/arch/x86/kernel/Makefile 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/Makefile 2009-06-09 15:26:37.000000000 +0200
+@@ -109,9 +109,12 @@ obj-$(CONFIG_X86_CHECK_BIOS_CORRUPTION)
obj-$(CONFIG_SWIOTLB) += pci-swiotlb.o
@@ -98,7 +98,7 @@ take the forward porting patches:
obj-$(CONFIG_X86_UV) += tlb_uv.o bios_uv.o uv_irq.o uv_sysfs.o uv_time.o
obj-$(CONFIG_X86_PM_TIMER) += pmtimer_64.o
obj-$(CONFIG_AUDIT) += audit_64.o
-@@ -121,4 +124,10 @@ ifeq ($(CONFIG_X86_64),y)
+@@ -122,4 +125,10 @@ ifeq ($(CONFIG_X86_64),y)
obj-$(CONFIG_PCI_MMCONFIG) += mmconf-fam10h_64.o
obj-y += vsmp_64.o
@@ -109,8 +109,8 @@ take the forward porting patches:
+
+disabled-obj-$(CONFIG_XEN) := i8259_$(BITS).o reboot.o smpboot_$(BITS).o
+%/head_$(BITS).o %/head_$(BITS).s: $(if $(CONFIG_XEN),EXTRA_AFLAGS,dummy) :=
---- head-2009-05-19.orig/arch/x86/kernel/acpi/Makefile 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/acpi/Makefile 2009-05-19 09:44:27.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/acpi/Makefile 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/acpi/Makefile 2009-06-09 15:26:37.000000000 +0200
@@ -5,6 +5,9 @@ obj-$(CONFIG_ACPI_SLEEP) += sleep.o wake
ifneq ($(CONFIG_ACPI_PROCESSOR),)
@@ -126,8 +126,8 @@ take the forward porting patches:
$(Q)$(MAKE) $(build)=$(obj)/realmode
+disabled-obj-$(CONFIG_XEN) := cstate.o wakeup_$(BITS).o
---- head-2009-05-19.orig/arch/x86/kernel/acpi/processor.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/acpi/processor.c 2009-05-19 09:44:27.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/acpi/processor.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/acpi/processor.c 2009-06-09 15:26:37.000000000 +0200
@@ -75,7 +75,18 @@ static void init_intel_pdc(struct acpi_p
/* Initialize _PDC data based on the CPU vendor */
void arch_acpi_processor_init_pdc(struct acpi_processor *pr)
@@ -147,23 +147,23 @@ take the forward porting patches:
pr->pdc = NULL;
if (c->x86_vendor == X86_VENDOR_INTEL)
---- head-2009-05-19.orig/arch/x86/kernel/cpu/mtrr/Makefile 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/cpu/mtrr/Makefile 2009-05-19 09:44:27.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/cpu/mtrr/Makefile 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/cpu/mtrr/Makefile 2009-06-09 15:26:37.000000000 +0200
@@ -1,3 +1,4 @@
obj-y := main.o if.o generic.o state.o cleanup.o
obj-$(CONFIG_X86_32) += amd.o cyrix.o centaur.o
+obj-$(CONFIG_XEN) := main.o if.o
---- head-2009-05-19.orig/arch/x86/lib/Makefile 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/arch/x86/lib/Makefile 2009-05-19 09:44:27.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/lib/Makefile 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/arch/x86/lib/Makefile 2009-06-09 15:26:37.000000000 +0200
@@ -22,3 +22,5 @@ else
lib-y += memmove_64.o memset_64.o
lib-y += copy_user_64.o rwlock_64.o copy_user_nocache_64.o
endif
+
+lib-$(CONFIG_XEN_SCRUB_PAGES) += scrub.o
---- head-2009-05-19.orig/arch/x86/mm/Makefile 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/arch/x86/mm/Makefile 2009-05-19 09:44:27.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/mm/Makefile 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/arch/x86/mm/Makefile 2009-06-09 15:26:37.000000000 +0200
@@ -18,4 +18,6 @@ obj-$(CONFIG_NUMA) += numa.o numa_$(BIT
obj-$(CONFIG_K8_NUMA) += k8topology_64.o
obj-$(CONFIG_ACPI_NUMA) += srat_$(BITS).o
@@ -171,8 +171,8 @@ take the forward porting patches:
+obj-$(CONFIG_XEN) += hypervisor.o
+
obj-$(CONFIG_MEMTEST) += memtest.o
---- head-2009-05-19.orig/arch/x86/oprofile/Makefile 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/arch/x86/oprofile/Makefile 2009-05-19 09:44:27.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/oprofile/Makefile 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/arch/x86/oprofile/Makefile 2009-06-09 15:26:37.000000000 +0200
@@ -6,7 +6,14 @@ DRIVER_OBJS = $(addprefix ../../../drive
oprofilefs.o oprofile_stats.o \
timer_int.o )
@@ -188,8 +188,8 @@ take the forward porting patches:
op_model_ppro.o op_model_p4.o
oprofile-$(CONFIG_X86_IO_APIC) += nmi_timer_int.o
+endif
---- head-2009-05-19.orig/arch/x86/pci/Makefile 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/arch/x86/pci/Makefile 2009-05-19 09:44:27.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/pci/Makefile 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/arch/x86/pci/Makefile 2009-06-09 15:26:37.000000000 +0200
@@ -4,6 +4,9 @@ obj-$(CONFIG_PCI_BIOS) += pcbios.o
obj-$(CONFIG_PCI_MMCONFIG) += mmconfig_$(BITS).o direct.o mmconfig-shared.o
obj-$(CONFIG_PCI_DIRECT) += direct.o
@@ -200,8 +200,8 @@ take the forward porting patches:
obj-y += fixup.o
obj-$(CONFIG_ACPI) += acpi.o
---- head-2009-05-19.orig/arch/x86/include/asm/acpi.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/arch/x86/include/asm/acpi.h 2009-05-19 09:44:27.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/asm/acpi.h 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/arch/x86/include/asm/acpi.h 2009-06-09 15:26:37.000000000 +0200
@@ -30,6 +30,10 @@
#include <asm/mmu.h>
#include <asm/mpspec.h>
@@ -251,8 +251,8 @@ take the forward porting patches:
struct bootnode;
---- head-2009-05-19.orig/arch/x86/include/asm/apic.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/arch/x86/include/asm/apic.h 2009-05-19 09:44:27.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/asm/apic.h 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/arch/x86/include/asm/apic.h 2009-06-09 15:26:37.000000000 +0200
@@ -15,7 +15,9 @@
#include <asm/system.h>
#include <asm/msr.h>
@@ -263,8 +263,8 @@ take the forward porting patches:
/*
* Debugging macros
---- head-2009-05-19.orig/arch/x86/include/asm/kexec.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/arch/x86/include/asm/kexec.h 2009-05-19 09:44:27.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/asm/kexec.h 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/arch/x86/include/asm/kexec.h 2009-06-09 15:26:37.000000000 +0200
@@ -163,6 +163,19 @@ struct kimage_arch {
};
#endif
diff --git a/patches.xen/xen3-auto-arch-x86_64.diff b/patches.xen/xen3-auto-arch-x86_64.diff
index d018e6b1ae..a82805d3b1 100644
--- a/patches.xen/xen3-auto-arch-x86_64.diff
+++ b/patches.xen/xen3-auto-arch-x86_64.diff
@@ -1,10 +1,10 @@
Subject: xen3 arch-x86_64
-From: http://xenbits.xensource.com/linux-2.6.18-xen.hg (tip 873:57acc535fd37)
+From: http://xenbits.xensource.com/linux-2.6.18-xen.hg (tip 898:ca12928cdafe)
Patch-mainline: obsolete
Acked-by: jbeulich@novell.com
---- head-2009-05-19.orig/arch/x86/kernel/asm-offsets_64.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/asm-offsets_64.c 2009-05-19 09:44:30.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/asm-offsets_64.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/asm-offsets_64.c 2009-06-09 15:26:39.000000000 +0200
@@ -114,8 +114,10 @@ int main(void)
ENTRY(cr8);
BLANK();
@@ -16,8 +16,8 @@ Acked-by: jbeulich@novell.com
DEFINE(crypto_tfm_ctx_offset, offsetof(struct crypto_tfm, __crt_ctx));
BLANK();
DEFINE(__NR_syscall_max, sizeof(syscalls) - 1);
---- head-2009-05-19.orig/arch/x86/kernel/machine_kexec_64.c 2009-05-19 09:42:44.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/machine_kexec_64.c 2009-05-19 09:44:30.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/machine_kexec_64.c 2009-06-09 15:21:35.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/machine_kexec_64.c 2009-06-09 15:26:39.000000000 +0200
@@ -19,6 +19,119 @@
#include <asm/tlbflush.h>
#include <asm/mmu_context.h>
@@ -209,8 +209,8 @@ Acked-by: jbeulich@novell.com
void arch_crash_save_vmcoreinfo(void)
{
---- head-2009-05-19.orig/arch/x86/power/cpu_64.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/arch/x86/power/cpu_64.c 2009-05-19 09:44:30.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/power/cpu_64.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/arch/x86/power/cpu_64.c 2009-06-09 15:26:39.000000000 +0200
@@ -143,6 +143,7 @@ void restore_processor_state(void)
static void fix_processor_context(void)
@@ -227,8 +227,8 @@ Acked-by: jbeulich@novell.com
syscall_init(); /* This sets MSR_*STAR and related */
load_TR_desc(); /* This does ltr */
---- head-2009-05-19.orig/arch/x86/vdso/Makefile 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/arch/x86/vdso/Makefile 2009-05-19 09:44:30.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/vdso/Makefile 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/arch/x86/vdso/Makefile 2009-06-09 15:26:39.000000000 +0200
@@ -65,6 +65,8 @@ obj-$(VDSO32-y) += vdso32-syms.lds
vdso32.so-$(VDSO32-y) += int80
vdso32.so-$(CONFIG_COMPAT) += syscall
diff --git a/patches.xen/xen3-auto-common.diff b/patches.xen/xen3-auto-common.diff
index 02734a47bb..d689a9088e 100644
--- a/patches.xen/xen3-auto-common.diff
+++ b/patches.xen/xen3-auto-common.diff
@@ -1,5 +1,5 @@
Subject: xen3 common
-From: http://xenbits.xensource.com/linux-2.6.18-xen.hg (tip 873:57acc535fd37)
+From: http://xenbits.xensource.com/linux-2.6.18-xen.hg (tip 898:ca12928cdafe)
Patch-mainline: obsolete
Acked-by: jbeulich@novell.com
@@ -12,8 +12,8 @@ take the forward porting patches:
2.6.25/mm/highmem.c
2.6.30/include/linux/pci_regs.h
---- head-2009-05-19.orig/drivers/Makefile 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/Makefile 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/drivers/Makefile 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/drivers/Makefile 2009-06-09 15:22:27.000000000 +0200
@@ -39,6 +39,7 @@ obj-$(CONFIG_PARPORT) += parport/
obj-y += base/ block/ misc/ mfd/
obj-$(CONFIG_NUBUS) += nubus/
@@ -22,8 +22,8 @@ take the forward porting patches:
obj-$(CONFIG_SCSI) += scsi/
obj-$(CONFIG_ATA) += ata/
obj-$(CONFIG_IDE) += ide/
---- head-2009-05-19.orig/drivers/acpi/Makefile 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/acpi/Makefile 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/drivers/acpi/Makefile 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/drivers/acpi/Makefile 2009-06-09 15:22:27.000000000 +0200
@@ -61,3 +61,6 @@ obj-$(CONFIG_ACPI_SBS) += sbs.o
processor-y := processor_core.o processor_throttling.o
processor-y += processor_idle.o processor_thermal.o
@@ -31,8 +31,8 @@ take the forward porting patches:
+ifdef CONFIG_PROCESSOR_EXTERNAL_CONTROL
+processor-objs += processor_perflib.o processor_extcntl.o
+endif
---- head-2009-05-19.orig/drivers/acpi/acpica/hwsleep.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/acpi/acpica/hwsleep.c 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/drivers/acpi/acpica/hwsleep.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/drivers/acpi/acpica/hwsleep.c 2009-06-09 15:22:27.000000000 +0200
@@ -235,7 +235,11 @@ acpi_status asmlinkage acpi_enter_sleep_
u32 pm1b_control;
struct acpi_bit_register_info *sleep_type_reg_info;
@@ -70,8 +70,8 @@ take the forward porting patches:
return_ACPI_STATUS(AE_OK);
}
---- head-2009-05-19.orig/drivers/acpi/processor_core.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/acpi/processor_core.c 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/drivers/acpi/processor_core.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/drivers/acpi/processor_core.c 2009-06-09 15:22:27.000000000 +0200
@@ -645,7 +645,8 @@ static int acpi_processor_get_info(struc
*/
if (pr->id == -1) {
@@ -245,7 +245,7 @@ take the forward porting patches:
cpu_down(pr->id);
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/acpi/processor_extcntl.c 2009-05-19 09:44:03.000000000 +0200
++++ head-2009-06-09/drivers/acpi/processor_extcntl.c 2009-06-09 15:22:27.000000000 +0200
@@ -0,0 +1,241 @@
+/*
+ * processor_extcntl.c - channel to external control logic
@@ -488,9 +488,9 @@ take the forward porting patches:
+ kfree(perf);
+ return ret;
+}
---- head-2009-05-19.orig/drivers/acpi/processor_idle.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/acpi/processor_idle.c 2009-05-19 09:44:03.000000000 +0200
-@@ -413,7 +413,8 @@ static int acpi_processor_get_power_info
+--- head-2009-06-09.orig/drivers/acpi/processor_idle.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/drivers/acpi/processor_idle.c 2009-06-09 15:22:27.000000000 +0200
+@@ -416,7 +416,8 @@ static int acpi_processor_get_power_info
*/
cx.entry_method = ACPI_CSTATE_HALT;
snprintf(cx.desc, ACPI_CX_DESC_LEN, "ACPI HLT");
@@ -500,7 +500,7 @@ take the forward porting patches:
continue;
}
if (cx.type == ACPI_STATE_C1 &&
-@@ -452,6 +453,12 @@ static int acpi_processor_get_power_info
+@@ -455,6 +456,12 @@ static int acpi_processor_get_power_info
cx.power = obj->integer.value;
@@ -513,7 +513,7 @@ take the forward porting patches:
current_count++;
memcpy(&(pr->power.states[current_count]), &cx, sizeof(cx));
-@@ -1218,6 +1225,11 @@ int __cpuinit acpi_processor_power_init(
+@@ -1224,6 +1231,11 @@ int __cpuinit acpi_processor_power_init(
acpi_driver_data(device));
if (!entry)
return -EIO;
@@ -525,8 +525,8 @@ take the forward porting patches:
return 0;
}
---- head-2009-05-19.orig/drivers/acpi/processor_perflib.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/acpi/processor_perflib.c 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/drivers/acpi/processor_perflib.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/drivers/acpi/processor_perflib.c 2009-06-09 15:22:27.000000000 +0200
@@ -76,6 +76,7 @@ MODULE_PARM_DESC(ignore_ppc, "If the fre
static int acpi_processor_ppc_status;
@@ -567,7 +567,7 @@ take the forward porting patches:
static int acpi_processor_get_performance_control(struct acpi_processor *pr)
{
-@@ -324,7 +333,10 @@ static int acpi_processor_get_performanc
+@@ -330,7 +339,10 @@ static int acpi_processor_get_performanc
return result;
}
@@ -579,7 +579,7 @@ take the forward porting patches:
{
int result = 0;
acpi_status status = AE_OK;
-@@ -365,6 +377,7 @@ static int acpi_processor_get_performanc
+@@ -371,6 +383,7 @@ static int acpi_processor_get_performanc
return result;
}
@@ -587,7 +587,7 @@ take the forward porting patches:
int acpi_processor_notify_smm(struct module *calling_module)
{
acpi_status status;
-@@ -425,8 +438,12 @@ int acpi_processor_notify_smm(struct mod
+@@ -431,8 +444,12 @@ int acpi_processor_notify_smm(struct mod
}
EXPORT_SYMBOL(acpi_processor_notify_smm);
@@ -601,8 +601,8 @@ take the forward porting patches:
{
int result = 0;
acpi_status status = AE_OK;
---- head-2009-05-19.orig/drivers/acpi/sleep.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/acpi/sleep.c 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/drivers/acpi/sleep.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/drivers/acpi/sleep.c 2009-06-09 15:22:27.000000000 +0200
@@ -60,6 +60,7 @@ static struct notifier_block tts_notifie
static int acpi_sleep_prepare(u32 acpi_state)
{
@@ -634,8 +634,8 @@ take the forward porting patches:
break;
}
---- head-2009-05-19.orig/drivers/char/agp/intel-agp.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/char/agp/intel-agp.c 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/drivers/char/agp/intel-agp.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/drivers/char/agp/intel-agp.c 2009-06-09 15:22:27.000000000 +0200
@@ -259,6 +259,13 @@ static void *i8xx_alloc_pages(void)
if (page == NULL)
return NULL;
@@ -660,8 +660,8 @@ take the forward porting patches:
put_page(page);
__free_pages(page, 2);
atomic_dec(&agp_bridge->current_memory_agp);
---- head-2009-05-19.orig/drivers/char/mem.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/char/mem.c 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/drivers/char/mem.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/drivers/char/mem.c 2009-06-09 15:22:27.000000000 +0200
@@ -110,6 +110,7 @@ void __attribute__((weak)) unxlate_dev_m
{
}
@@ -720,16 +720,16 @@ take the forward porting patches:
#ifdef CONFIG_DEVKMEM
static const struct file_operations kmem_fops = {
---- head-2009-05-19.orig/drivers/char/tpm/Makefile 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/char/tpm/Makefile 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/drivers/char/tpm/Makefile 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/drivers/char/tpm/Makefile 2009-06-09 15:22:27.000000000 +0200
@@ -9,3 +9,5 @@ obj-$(CONFIG_TCG_TIS) += tpm_tis.o
obj-$(CONFIG_TCG_NSC) += tpm_nsc.o
obj-$(CONFIG_TCG_ATMEL) += tpm_atmel.o
obj-$(CONFIG_TCG_INFINEON) += tpm_infineon.o
+obj-$(CONFIG_TCG_XEN) += tpm_xenu.o
+tpm_xenu-y = tpm_xen.o tpm_vtpm.o
---- head-2009-05-19.orig/drivers/char/tpm/tpm.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/char/tpm/tpm.h 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/drivers/char/tpm/tpm.h 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/drivers/char/tpm/tpm.h 2009-06-09 15:22:27.000000000 +0200
@@ -108,6 +108,9 @@ struct tpm_chip {
struct dentry **bios_dir;
@@ -760,7 +760,7 @@ take the forward porting patches:
extern void tpm_gen_interrupt(struct tpm_chip *);
extern void tpm_continue_selftest(struct tpm_chip *);
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/char/tpm/tpm_vtpm.c 2009-05-19 09:44:03.000000000 +0200
++++ head-2009-06-09/drivers/char/tpm/tpm_vtpm.c 2009-06-09 15:22:27.000000000 +0200
@@ -0,0 +1,542 @@
+/*
+ * Copyright (C) 2006 IBM Corporation
@@ -1305,7 +1305,7 @@ take the forward porting patches:
+ kfree(vtpms);
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/char/tpm/tpm_vtpm.h 2009-05-19 09:44:03.000000000 +0200
++++ head-2009-06-09/drivers/char/tpm/tpm_vtpm.h 2009-06-09 15:22:27.000000000 +0200
@@ -0,0 +1,55 @@
+#ifndef TPM_VTPM_H
+#define TPM_VTPM_H
@@ -1363,7 +1363,7 @@ take the forward porting patches:
+
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/char/tpm/tpm_xen.c 2009-05-19 09:44:03.000000000 +0200
++++ head-2009-06-09/drivers/char/tpm/tpm_xen.c 2009-06-09 15:22:27.000000000 +0200
@@ -0,0 +1,722 @@
+/*
+ * Copyright (c) 2005, IBM Corporation
@@ -2087,8 +2087,8 @@ take the forward porting patches:
+module_init(tpmif_init);
+
+MODULE_LICENSE("Dual BSD/GPL");
---- head-2009-05-19.orig/drivers/ide/ide-lib.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/ide/ide-lib.c 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/drivers/ide/ide-lib.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/drivers/ide/ide-lib.c 2009-06-09 15:22:27.000000000 +0200
@@ -18,12 +18,12 @@ void ide_toggle_bounce(ide_drive_t *driv
{
u64 addr = BLK_BOUNCE_HIGH; /* dma64_addr_t */
@@ -2106,8 +2106,8 @@ take the forward porting patches:
addr = *dev->dma_mask;
}
---- head-2009-05-19.orig/drivers/oprofile/buffer_sync.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/oprofile/buffer_sync.c 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/drivers/oprofile/buffer_sync.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/drivers/oprofile/buffer_sync.c 2009-06-09 15:22:27.000000000 +0200
@@ -8,6 +8,10 @@
* @author Barry Kasindorf
* @author Robert Richter <robert.richter@amd.com>
@@ -2284,8 +2284,8 @@ take the forward porting patches:
mark_done(cpu);
mutex_unlock(&buffer_mutex);
---- head-2009-05-19.orig/drivers/oprofile/cpu_buffer.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/oprofile/cpu_buffer.c 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/drivers/oprofile/cpu_buffer.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/drivers/oprofile/cpu_buffer.c 2009-06-09 15:22:27.000000000 +0200
@@ -8,6 +8,10 @@
* @author Barry Kasindorf <barry.kasindorf@amd.com>
* @author Robert Richter <robert.richter@amd.com>
@@ -2306,7 +2306,7 @@ take the forward porting patches:
unsigned long oprofile_get_cpu_buffer_size(void)
{
return oprofile_cpu_buffer_size;
-@@ -95,7 +101,7 @@ int alloc_cpu_buffers(void)
+@@ -99,7 +105,7 @@ int alloc_cpu_buffers(void)
struct oprofile_cpu_buffer *b = &per_cpu(cpu_buffer, i);
b->last_task = NULL;
@@ -2315,7 +2315,7 @@ take the forward porting patches:
b->tracing = 0;
b->buffer_size = buffer_size;
b->sample_received = 0;
-@@ -213,7 +219,7 @@ unsigned long op_cpu_buffer_entries(int
+@@ -217,7 +223,7 @@ unsigned long op_cpu_buffer_entries(int
static int
op_add_code(struct oprofile_cpu_buffer *cpu_buf, unsigned long backtrace,
@@ -2324,7 +2324,7 @@ take the forward porting patches:
{
struct op_entry entry;
struct op_sample *sample;
-@@ -226,16 +232,15 @@ op_add_code(struct oprofile_cpu_buffer *
+@@ -230,16 +236,15 @@ op_add_code(struct oprofile_cpu_buffer *
flags |= TRACE_BEGIN;
/* notice a switch from user->kernel or vice versa */
@@ -2347,7 +2347,7 @@ take the forward porting patches:
cpu_buf->last_task = task;
flags |= USER_CTX_SWITCH;
}
-@@ -284,14 +289,14 @@ op_add_sample(struct oprofile_cpu_buffer
+@@ -288,14 +293,14 @@ op_add_sample(struct oprofile_cpu_buffer
/*
* This must be safe from any context.
*
@@ -2366,7 +2366,7 @@ take the forward porting patches:
{
cpu_buf->sample_received++;
-@@ -300,7 +305,7 @@ log_sample(struct oprofile_cpu_buffer *c
+@@ -304,7 +309,7 @@ log_sample(struct oprofile_cpu_buffer *c
return 0;
}
@@ -2375,7 +2375,7 @@ take the forward porting patches:
goto fail;
if (op_add_sample(cpu_buf, pc, event))
-@@ -440,6 +445,25 @@ fail:
+@@ -444,6 +449,25 @@ fail:
return;
}
@@ -2401,8 +2401,8 @@ take the forward porting patches:
/*
* This serves to avoid cpu buffer overflow, and makes sure
* the task mortuary progresses
---- head-2009-05-19.orig/drivers/oprofile/cpu_buffer.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/oprofile/cpu_buffer.h 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/drivers/oprofile/cpu_buffer.h 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/drivers/oprofile/cpu_buffer.h 2009-06-09 15:22:27.000000000 +0200
@@ -40,7 +40,7 @@ struct op_entry;
struct oprofile_cpu_buffer {
unsigned long buffer_size;
@@ -2437,8 +2437,8 @@ take the forward porting patches:
+#define DOMAIN_SWITCH (1UL << 5)
#endif /* OPROFILE_CPU_BUFFER_H */
---- head-2009-05-19.orig/drivers/oprofile/event_buffer.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/oprofile/event_buffer.h 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/drivers/oprofile/event_buffer.h 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/drivers/oprofile/event_buffer.h 2009-06-09 15:22:27.000000000 +0200
@@ -30,6 +30,9 @@ void wake_up_buffer_waiter(void);
#define INVALID_COOKIE ~0UL
#define NO_COOKIE 0UL
@@ -2449,8 +2449,8 @@ take the forward porting patches:
extern const struct file_operations event_buffer_fops;
/* mutex between sync_cpu_buffers() and the
---- head-2009-05-19.orig/drivers/oprofile/oprof.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/oprofile/oprof.c 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/drivers/oprofile/oprof.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/drivers/oprofile/oprof.c 2009-06-09 15:22:27.000000000 +0200
@@ -5,6 +5,10 @@
* @remark Read the file COPYING
*
@@ -2495,8 +2495,8 @@ take the forward porting patches:
int oprofile_setup(void)
{
int err;
---- head-2009-05-19.orig/drivers/oprofile/oprof.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/oprofile/oprof.h 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/drivers/oprofile/oprof.h 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/drivers/oprofile/oprof.h 2009-06-09 15:22:27.000000000 +0200
@@ -36,4 +36,7 @@ void oprofile_timer_init(struct oprofile
int oprofile_set_backtrace(unsigned long depth);
@@ -2505,8 +2505,8 @@ take the forward porting patches:
+int oprofile_set_passive(int passive_domains[], unsigned int pdomains);
+
#endif /* OPROF_H */
---- head-2009-05-19.orig/drivers/oprofile/oprofile_files.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/oprofile/oprofile_files.c 2009-05-19 09:16:41.000000000 +0200
+--- head-2009-06-09.orig/drivers/oprofile/oprofile_files.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/drivers/oprofile/oprofile_files.c 2009-06-09 15:22:27.000000000 +0200
@@ -5,10 +5,16 @@
* @remark Read the file COPYING
*
@@ -2729,8 +2729,19 @@ take the forward porting patches:
oprofilefs_create_file(sb, root, "buffer", &event_buffer_fops);
oprofilefs_create_ulong(sb, root, "buffer_size", &oprofile_buffer_size);
oprofilefs_create_ulong(sb, root, "buffer_watershed", &oprofile_buffer_watershed);
---- head-2009-05-19.orig/fs/aio.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/fs/aio.c 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/drivers/pci/iov.c 2009-04-21 10:18:27.000000000 +0200
++++ head-2009-06-09/drivers/pci/iov.c 2009-06-09 15:22:27.000000000 +0200
+@@ -487,6 +487,8 @@ found:
+ iov->self = dev;
+ pci_read_config_dword(dev, pos + PCI_SRIOV_CAP, &iov->cap);
+ pci_read_config_byte(dev, pos + PCI_SRIOV_FUNC_LINK, &iov->link);
++ if (!dev->bus->number) /* Root Complex Integrated Endpoint */
++ iov->link = PCI_DEVFN(PCI_SLOT(dev->devfn), iov->link);
+
+ if (pdev)
+ iov->dev = pci_dev_get(pdev);
+--- head-2009-06-09.orig/fs/aio.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/fs/aio.c 2009-06-09 15:22:27.000000000 +0200
@@ -36,6 +36,11 @@
#include <asm/uaccess.h>
#include <asm/mmu_context.h>
@@ -2918,8 +2929,8 @@ take the forward porting patches:
get_ioctx(ioctx); /* io_destroy() expects us to hold a ref */
io_destroy(ioctx);
---- head-2009-05-19.orig/fs/compat_ioctl.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/fs/compat_ioctl.c 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/fs/compat_ioctl.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/fs/compat_ioctl.c 2009-06-09 15:22:27.000000000 +0200
@@ -114,6 +114,13 @@
#include <asm/fbio.h>
#endif
@@ -2953,8 +2964,8 @@ take the forward porting patches:
};
#define IOCTL_HASHSIZE 256
---- head-2009-05-19.orig/include/acpi/processor.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/acpi/processor.h 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/include/acpi/processor.h 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/include/acpi/processor.h 2009-06-09 15:22:27.000000000 +0200
@@ -17,6 +17,12 @@
#define ACPI_PROCESSOR_MAX_THROTTLE 250 /* 25% */
#define ACPI_PROCESSOR_MAX_DUTY_WIDTH 4
@@ -3138,8 +3149,8 @@ take the forward porting patches:
+#endif /* CONFIG_XEN */
+
#endif
---- head-2009-05-19.orig/include/asm-generic/pci.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/asm-generic/pci.h 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/include/asm-generic/pci.h 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/include/asm-generic/pci.h 2009-06-09 15:22:27.000000000 +0200
@@ -43,7 +43,9 @@ pcibios_select_root(struct pci_dev *pdev
return root;
}
@@ -3150,8 +3161,8 @@ take the forward porting patches:
#ifndef HAVE_ARCH_PCI_GET_LEGACY_IDE_IRQ
static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)
---- head-2009-05-19.orig/include/asm-generic/pgtable.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/asm-generic/pgtable.h 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/include/asm-generic/pgtable.h 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/include/asm-generic/pgtable.h 2009-06-09 15:22:27.000000000 +0200
@@ -99,6 +99,10 @@ static inline void ptep_set_wrprotect(st
}
#endif
@@ -3163,8 +3174,8 @@ take the forward porting patches:
#ifndef __HAVE_ARCH_PTE_SAME
#define pte_same(A,B) (pte_val(A) == pte_val(B))
#endif
---- head-2009-05-19.orig/include/linux/aio.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/linux/aio.h 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/include/linux/aio.h 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/include/linux/aio.h 2009-06-09 15:22:27.000000000 +0200
@@ -201,6 +201,12 @@ struct kioctx {
struct delayed_work wq;
@@ -3178,8 +3189,8 @@ take the forward porting patches:
struct rcu_head rcu_head;
};
---- head-2009-05-19.orig/include/linux/highmem.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/linux/highmem.h 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/include/linux/highmem.h 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/include/linux/highmem.h 2009-06-09 15:22:27.000000000 +0200
@@ -128,12 +128,14 @@ alloc_zeroed_user_highpage_movable(struc
return __alloc_zeroed_user_highpage(__GFP_MOVABLE, vma, vaddr);
}
@@ -3211,8 +3222,8 @@ take the forward porting patches:
+#endif
+
#endif /* _LINUX_HIGHMEM_H */
---- head-2009-05-19.orig/include/linux/interrupt.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/linux/interrupt.h 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/include/linux/interrupt.h 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/include/linux/interrupt.h 2009-06-09 15:22:27.000000000 +0200
@@ -307,6 +307,12 @@ static inline int disable_irq_wake(unsig
}
#endif /* CONFIG_GENERIC_HARDIRQS */
@@ -3226,8 +3237,8 @@ take the forward porting patches:
#ifndef __ARCH_SET_SOFTIRQ_PENDING
#define set_softirq_pending(x) (local_softirq_pending() = (x))
#define or_softirq_pending(x) (local_softirq_pending() |= (x))
---- head-2009-05-19.orig/include/linux/kexec.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/linux/kexec.h 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/include/linux/kexec.h 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/include/linux/kexec.h 2009-06-09 15:22:27.000000000 +0200
@@ -46,6 +46,13 @@
KEXEC_CORE_NOTE_NAME_BYTES + \
KEXEC_CORE_NOTE_DESC_BYTES )
@@ -3255,19 +3266,22 @@ take the forward porting patches:
extern asmlinkage long sys_kexec_load(unsigned long entry,
unsigned long nr_segments,
struct kexec_segment __user *segments,
---- head-2009-05-19.orig/include/linux/mm.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/linux/mm.h 2009-05-19 09:44:03.000000000 +0200
-@@ -105,6 +105,9 @@ extern unsigned int kobjsize(const void
+--- head-2009-06-09.orig/include/linux/mm.h 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/include/linux/mm.h 2009-06-09 15:22:27.000000000 +0200
+@@ -105,6 +105,12 @@ extern unsigned int kobjsize(const void
#define VM_MIXEDMAP 0x10000000 /* Can contain "struct page" and pure PFN pages */
#define VM_SAO 0x20000000 /* Strong Access Ordering (powerpc) */
#define VM_PFN_AT_MMAP 0x40000000 /* PFNMAP vma that is fully mapped at mmap time */
+#ifdef CONFIG_XEN
+#define VM_FOREIGN 0x80000000 /* Has pages belonging to another VM */
++struct vm_foreign_map {
++ struct page **map;
++};
+#endif
#ifndef VM_STACK_DEFAULT_FLAGS /* arch can override this */
#define VM_STACK_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS
-@@ -198,6 +201,11 @@ struct vm_operations_struct {
+@@ -198,6 +204,15 @@ struct vm_operations_struct {
*/
int (*access)(struct vm_area_struct *vma, unsigned long addr,
void *buf, int len, int write);
@@ -3276,11 +3290,15 @@ take the forward porting patches:
+ * original value of @ptep. */
+ pte_t (*zap_pte)(struct vm_area_struct *vma,
+ unsigned long addr, pte_t *ptep, int is_fullmm);
++
++ /* called before close() to indicate no more pages should be mapped */
++ void (*unmap)(struct vm_area_struct *area);
++
#ifdef CONFIG_NUMA
/*
* set_policy() op must add a reference to any non-NULL @new mempolicy
---- head-2009-05-19.orig/include/linux/oprofile.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/linux/oprofile.h 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/include/linux/oprofile.h 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/include/linux/oprofile.h 2009-06-09 15:22:27.000000000 +0200
@@ -16,6 +16,8 @@
#include <linux/types.h>
#include <linux/spinlock.h>
@@ -3332,19 +3350,21 @@ take the forward porting patches:
/**
* Create a file of the given name as a child of the given root, with
---- head-2009-05-19.orig/include/linux/page-flags.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/linux/page-flags.h 2009-05-19 09:44:03.000000000 +0200
-@@ -106,6 +106,9 @@ enum pageflags {
+--- head-2009-06-09.orig/include/linux/page-flags.h 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/include/linux/page-flags.h 2009-06-09 15:22:27.000000000 +0200
+@@ -106,6 +106,11 @@ enum pageflags {
#ifdef CONFIG_IA64_UNCACHED_ALLOCATOR
PG_uncached, /* Page has been mapped as uncached */
#endif
+#ifdef CONFIG_XEN
+ PG_foreign, /* Page is owned by foreign allocator. */
++ PG_netback, /* Page is owned by netback */
++ PG_blkback, /* Page is owned by blkback */
+#endif
__NR_PAGEFLAGS,
/* Filesystems */
-@@ -327,6 +330,19 @@ static inline void SetPageUptodate(struc
+@@ -327,6 +332,27 @@ static inline void SetPageUptodate(struc
CLEARPAGEFLAG(Uptodate, uptodate)
@@ -3361,10 +3381,18 @@ take the forward porting patches:
+#define PageForeignDestructor(_page, order) \
+ ((void (*)(struct page *, unsigned int))(_page)->index)(_page, order)
+
++#define PageNetback(page) test_bit(PG_netback, &(page)->flags)
++#define SetPageNetback(page) set_bit(PG_netback, &(page)->flags)
++#define ClearPageNetback(page) clear_bit(PG_netback, &(page)->flags)
++
++#define PageBlkback(page) test_bit(PG_blkback, &(page)->flags)
++#define SetPageBlkback(page) set_bit(PG_blkback, &(page)->flags)
++#define ClearPageBlkback(page) clear_bit(PG_blkback, &(page)->flags)
++
extern void cancel_dirty_page(struct page *page, unsigned int account_size);
int test_clear_page_writeback(struct page *page);
-@@ -409,6 +425,14 @@ PAGEFLAG_FALSE(MemError)
+@@ -409,6 +435,14 @@ PAGEFLAG_FALSE(MemError)
#define __PG_MLOCKED 0
#endif
@@ -3379,7 +3407,7 @@ take the forward porting patches:
/*
* Flags checked when a page is freed. Pages being freed should not have
* these flags set. It they are, there is a problem.
-@@ -418,7 +442,7 @@ PAGEFLAG_FALSE(MemError)
+@@ -418,7 +452,7 @@ PAGEFLAG_FALSE(MemError)
1 << PG_private | 1 << PG_private_2 | \
1 << PG_buddy | 1 << PG_writeback | 1 << PG_reserved | \
1 << PG_slab | 1 << PG_swapcache | 1 << PG_active | \
@@ -3388,8 +3416,8 @@ take the forward porting patches:
/*
* Flags checked when a page is prepped for return by the page allocator.
---- head-2009-05-19.orig/include/linux/pci.h 2009-05-19 09:42:46.000000000 +0200
-+++ head-2009-05-19/include/linux/pci.h 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/include/linux/pci.h 2009-06-09 15:21:37.000000000 +0200
++++ head-2009-06-09/include/linux/pci.h 2009-06-09 15:22:27.000000000 +0200
@@ -857,6 +857,11 @@ static inline int pci_msi_enabled(void)
{
return 0;
@@ -3413,8 +3441,8 @@ take the forward porting patches:
#endif
#ifndef CONFIG_PCIEASPM
---- head-2009-05-19.orig/include/linux/skbuff.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/linux/skbuff.h 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/include/linux/skbuff.h 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/include/linux/skbuff.h 2009-06-09 15:22:27.000000000 +0200
@@ -274,6 +274,8 @@ typedef unsigned char *sk_buff_data_t;
* @local_df: allow local fragmentation
* @cloned: Head may be cloned (check refcnt to be sure)
@@ -3437,8 +3465,8 @@ take the forward porting patches:
#ifdef CONFIG_NET_DMA
dma_cookie_t dma_cookie;
---- head-2009-05-19.orig/include/linux/vermagic.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/linux/vermagic.h 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/include/linux/vermagic.h 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/include/linux/vermagic.h 2009-06-09 15:22:27.000000000 +0200
@@ -22,6 +22,11 @@
#else
#define MODULE_VERMAGIC_MODVERSIONS ""
@@ -3458,8 +3486,8 @@ take the forward porting patches:
- MODULE_ARCH_VERMAGIC
+ MODULE_VERMAGIC_XEN MODULE_ARCH_VERMAGIC
---- head-2009-05-19.orig/kernel/irq/spurious.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/kernel/irq/spurious.c 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/kernel/irq/spurious.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/kernel/irq/spurious.c 2009-06-09 15:22:27.000000000 +0200
@@ -235,7 +235,7 @@ void note_interrupt(unsigned int irq, st
*/
if (time_after(jiffies, desc->last_unhandled + HZ/10))
@@ -3469,8 +3497,8 @@ take the forward porting patches:
desc->irqs_unhandled++;
desc->last_unhandled = jiffies;
if (unlikely(action_ret != IRQ_NONE))
---- head-2009-05-19.orig/kernel/kexec.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/kernel/kexec.c 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/kernel/kexec.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/kernel/kexec.c 2009-06-09 15:22:27.000000000 +0200
@@ -360,13 +360,26 @@ static int kimage_is_destination_range(s
return 0;
}
@@ -3671,8 +3699,8 @@ take the forward porting patches:
/* Install the new kernel, and Uninstall the old */
image = xchg(dest_image, image);
---- head-2009-05-19.orig/kernel/sysctl.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/kernel/sysctl.c 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/kernel/sysctl.c 2009-06-09 15:21:25.000000000 +0200
++++ head-2009-06-09/kernel/sysctl.c 2009-06-09 15:22:27.000000000 +0200
@@ -794,7 +794,7 @@ static struct ctl_table kern_table[] = {
.proc_handler = &proc_dointvec,
},
@@ -3682,8 +3710,8 @@ take the forward porting patches:
{
.procname = "acpi_video_flags",
.data = &acpi_realmode_flags,
---- head-2009-05-19.orig/mm/memory.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/mm/memory.c 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/mm/memory.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/mm/memory.c 2009-06-09 15:22:27.000000000 +0200
@@ -493,6 +493,12 @@ struct page *vm_normal_page(struct vm_ar
{
unsigned long pfn = pte_pfn(pte);
@@ -3730,13 +3758,15 @@ take the forward porting patches:
/**
* zap_vma_ptes - remove ptes mapping the vma
-@@ -1273,6 +1287,26 @@ int __get_user_pages(struct task_struct
+@@ -1273,6 +1287,28 @@ int __get_user_pages(struct task_struct
continue;
}
+#ifdef CONFIG_XEN
+ if (vma && (vma->vm_flags & VM_FOREIGN)) {
-+ struct page **map = vma->vm_private_data;
++ struct vm_foreign_map *foreign_map =
++ vma->vm_private_data;
++ struct page **map = foreign_map->map;
+ int offset = (start - vma->vm_start) >> PAGE_SHIFT;
+ if (map[offset] != NULL) {
+ if (pages) {
@@ -3757,8 +3787,41 @@ take the forward porting patches:
if (!vma ||
(vma->vm_flags & (VM_IO | VM_PFNMAP)) ||
(!ignore && !(vm_flags & vma->vm_flags)))
---- head-2009-05-19.orig/mm/mprotect.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/mm/mprotect.c 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/mm/mmap.c 2009-05-19 09:27:44.000000000 +0200
++++ head-2009-06-09/mm/mmap.c 2009-06-09 15:22:27.000000000 +0200
+@@ -1839,6 +1839,12 @@ static void unmap_region(struct mm_struc
+ tlb_finish_mmu(tlb, start, end);
+ }
+
++static inline void unmap_vma(struct vm_area_struct *vma)
++{
++ if (unlikely(vma->vm_ops && vma->vm_ops->unmap))
++ vma->vm_ops->unmap(vma);
++}
++
+ /*
+ * Create a list of vma's touched by the unmap, removing them from the mm's
+ * vma list as we go..
+@@ -1854,6 +1860,7 @@ detach_vmas_to_be_unmapped(struct mm_str
+ insertion_point = (prev ? &prev->vm_next : &mm->mmap);
+ do {
+ rb_erase(&vma->vm_rb, &mm->mm_rb);
++ unmap_vma(vma);
+ mm->map_count--;
+ tail_vma = vma;
+ vma = vma->vm_next;
+@@ -2154,6 +2161,9 @@ void exit_mmap(struct mm_struct *mm)
+
+ arch_exit_mmap(mm);
+
++ for (vma = mm->mmap; vma; vma = vma->vm_next)
++ unmap_vma(vma);
++
+ vma = mm->mmap;
+ if (!vma) /* Can happen if dup_mmap() received an OOM */
+ return;
+--- head-2009-06-09.orig/mm/mprotect.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/mm/mprotect.c 2009-06-09 15:22:27.000000000 +0200
@@ -90,6 +90,8 @@ static inline void change_pmd_range(stru
next = pmd_addr_end(addr, end);
if (pmd_none_or_clear_bad(pmd))
@@ -3768,8 +3831,8 @@ take the forward porting patches:
change_pte_range(mm, pmd, addr, next, newprot, dirty_accountable);
} while (pmd++, addr = next, addr != end);
}
---- head-2009-05-19.orig/mm/page_alloc.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/mm/page_alloc.c 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/mm/page_alloc.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/mm/page_alloc.c 2009-06-09 15:22:27.000000000 +0200
@@ -549,6 +549,13 @@ static void __free_pages_ok(struct page
int i;
int bad = 0;
@@ -3798,8 +3861,8 @@ take the forward porting patches:
if (PageAnon(page))
page->mapping = NULL;
if (free_pages_check(page))
---- head-2009-05-19.orig/net/core/dev.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/net/core/dev.c 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/net/core/dev.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/net/core/dev.c 2009-06-09 15:22:27.000000000 +0200
@@ -135,6 +135,12 @@
/* This should be increased if a protocol with a bigger head is added. */
#define GRO_MAX_HEAD (MAX_HEADER + 128)
@@ -3897,8 +3960,8 @@ take the forward porting patches:
#if defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE)
EXPORT_SYMBOL(br_handle_frame_hook);
---- head-2009-05-19.orig/net/core/skbuff.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/net/core/skbuff.c 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/net/core/skbuff.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/net/core/skbuff.c 2009-06-09 15:22:27.000000000 +0200
@@ -568,6 +568,10 @@ static struct sk_buff *__skb_clone(struc
n->hdr_len = skb->nohdr ? skb_headroom(skb) : skb->hdr_len;
n->cloned = 1;
@@ -3910,8 +3973,8 @@ take the forward porting patches:
n->destructor = NULL;
C(iif);
C(tail);
---- head-2009-05-19.orig/net/ipv4/netfilter/nf_nat_proto_tcp.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/net/ipv4/netfilter/nf_nat_proto_tcp.c 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/net/ipv4/netfilter/nf_nat_proto_tcp.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/net/ipv4/netfilter/nf_nat_proto_tcp.c 2009-06-09 15:22:27.000000000 +0200
@@ -75,6 +75,9 @@ tcp_manip_pkt(struct sk_buff *skb,
if (hdrsize < sizeof(*hdr))
return true;
@@ -3922,8 +3985,8 @@ take the forward porting patches:
inet_proto_csum_replace4(&hdr->check, skb, oldip, newip, 1);
inet_proto_csum_replace2(&hdr->check, skb, oldport, newport, 0);
return true;
---- head-2009-05-19.orig/net/ipv4/netfilter/nf_nat_proto_udp.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/net/ipv4/netfilter/nf_nat_proto_udp.c 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/net/ipv4/netfilter/nf_nat_proto_udp.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/net/ipv4/netfilter/nf_nat_proto_udp.c 2009-06-09 15:22:27.000000000 +0200
@@ -60,6 +60,10 @@ udp_manip_pkt(struct sk_buff *skb,
newport = tuple->dst.u.udp.port;
portptr = &hdr->dest;
@@ -3935,8 +3998,8 @@ take the forward porting patches:
if (hdr->check || skb->ip_summed == CHECKSUM_PARTIAL) {
inet_proto_csum_replace4(&hdr->check, skb, oldip, newip, 1);
inet_proto_csum_replace2(&hdr->check, skb, *portptr, newport,
---- head-2009-05-19.orig/net/ipv4/xfrm4_output.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/net/ipv4/xfrm4_output.c 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/net/ipv4/xfrm4_output.c 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/net/ipv4/xfrm4_output.c 2009-06-09 15:22:27.000000000 +0200
@@ -81,7 +81,7 @@ static int xfrm4_output_finish(struct sk
#endif
@@ -3946,8 +4009,8 @@ take the forward porting patches:
}
int xfrm4_output(struct sk_buff *skb)
---- head-2009-05-19.orig/scripts/Makefile.build 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/scripts/Makefile.build 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/scripts/Makefile.build 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/scripts/Makefile.build 2009-06-09 15:22:27.000000000 +0200
@@ -76,6 +76,20 @@ ifndef obj
$(warning kbuild: Makefile.build is included improperly)
endif
@@ -3969,8 +4032,8 @@ take the forward porting patches:
# ===========================================================================
ifneq ($(strip $(lib-y) $(lib-m) $(lib-n) $(lib-)),)
---- head-2009-05-19.orig/scripts/Makefile.lib 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/scripts/Makefile.lib 2009-05-19 09:44:03.000000000 +0200
+--- head-2009-06-09.orig/scripts/Makefile.lib 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/scripts/Makefile.lib 2009-06-09 15:22:27.000000000 +0200
@@ -22,6 +22,12 @@ obj-m := $(filter-out $(obj-y),$(obj-m))
lib-y := $(filter-out $(obj-y), $(sort $(lib-y) $(lib-m)))
diff --git a/patches.xen/xen3-auto-include-xen-interface.diff b/patches.xen/xen3-auto-include-xen-interface.diff
index 9b2eed1d88..a1109be6b1 100644
--- a/patches.xen/xen3-auto-include-xen-interface.diff
+++ b/patches.xen/xen3-auto-include-xen-interface.diff
@@ -1,10 +1,10 @@
Subject: xen3 include-xen-interface
-From: http://xenbits.xensource.com/linux-2.6.18-xen.hg (tip 873:57acc535fd37)
+From: http://xenbits.xensource.com/linux-2.6.18-xen.hg (tip 898:ca12928cdafe)
Patch-mainline: obsolete
Acked-by: jbeulich@novell.com
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/COPYING 2007-06-12 13:14:19.000000000 +0200
++++ head-2009-06-09/include/xen/interface/COPYING 2007-06-12 13:14:19.000000000 +0200
@@ -0,0 +1,38 @@
+XEN NOTICE
+==========
@@ -45,7 +45,7 @@ Acked-by: jbeulich@novell.com
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/arch-x86/cpuid.h 2008-01-21 11:15:27.000000000 +0100
++++ head-2009-06-09/include/xen/interface/arch-x86/cpuid.h 2008-01-21 11:15:27.000000000 +0100
@@ -0,0 +1,68 @@
+/******************************************************************************
+ * arch-x86/cpuid.h
@@ -116,7 +116,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __XEN_PUBLIC_ARCH_X86_CPUID_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/arch-x86/hvm/save.h 2009-04-07 13:58:49.000000000 +0200
++++ head-2009-06-09/include/xen/interface/arch-x86/hvm/save.h 2009-04-07 13:58:49.000000000 +0200
@@ -0,0 +1,440 @@
+/*
+ * Structure definitions for HVM state that is held by Xen and must
@@ -559,7 +559,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __XEN_PUBLIC_HVM_SAVE_X86_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/arch-x86/xen-mca.h 2009-05-19 09:16:41.000000000 +0200
++++ head-2009-06-09/include/xen/interface/arch-x86/xen-mca.h 2009-05-19 09:16:41.000000000 +0200
@@ -0,0 +1,422 @@
+/******************************************************************************
+ * arch-x86/mca.h
@@ -984,7 +984,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __XEN_PUBLIC_ARCH_X86_MCA_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/arch-x86/xen-x86_32.h 2008-07-21 11:00:33.000000000 +0200
++++ head-2009-06-09/include/xen/interface/arch-x86/xen-x86_32.h 2008-07-21 11:00:33.000000000 +0200
@@ -0,0 +1,180 @@
+/******************************************************************************
+ * xen-x86_32.h
@@ -1167,7 +1167,7 @@ Acked-by: jbeulich@novell.com
+ * End:
+ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/arch-x86/xen-x86_64.h 2008-04-02 12:34:02.000000000 +0200
++++ head-2009-06-09/include/xen/interface/arch-x86/xen-x86_64.h 2008-04-02 12:34:02.000000000 +0200
@@ -0,0 +1,212 @@
+/******************************************************************************
+ * xen-x86_64.h
@@ -1382,7 +1382,7 @@ Acked-by: jbeulich@novell.com
+ * End:
+ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/arch-x86/xen.h 2009-05-19 09:16:41.000000000 +0200
++++ head-2009-06-09/include/xen/interface/arch-x86/xen.h 2009-05-19 09:16:41.000000000 +0200
@@ -0,0 +1,200 @@
+/******************************************************************************
+ * arch-x86/xen.h
@@ -1585,7 +1585,7 @@ Acked-by: jbeulich@novell.com
+ * End:
+ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/arch-x86_32.h 2007-06-12 13:14:19.000000000 +0200
++++ head-2009-06-09/include/xen/interface/arch-x86_32.h 2007-06-12 13:14:19.000000000 +0200
@@ -0,0 +1,27 @@
+/******************************************************************************
+ * arch-x86_32.h
@@ -1615,7 +1615,7 @@ Acked-by: jbeulich@novell.com
+
+#include "arch-x86/xen.h"
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/arch-x86_64.h 2007-06-12 13:14:19.000000000 +0200
++++ head-2009-06-09/include/xen/interface/arch-x86_64.h 2007-06-12 13:14:19.000000000 +0200
@@ -0,0 +1,27 @@
+/******************************************************************************
+ * arch-x86_64.h
@@ -1645,7 +1645,7 @@ Acked-by: jbeulich@novell.com
+
+#include "arch-x86/xen.h"
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/dom0_ops.h 2007-06-12 13:14:19.000000000 +0200
++++ head-2009-06-09/include/xen/interface/dom0_ops.h 2007-06-12 13:14:19.000000000 +0200
@@ -0,0 +1,120 @@
+/******************************************************************************
+ * dom0_ops.h
@@ -1768,7 +1768,7 @@ Acked-by: jbeulich@novell.com
+ * End:
+ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/domctl.h 2009-05-19 09:16:41.000000000 +0200
++++ head-2009-06-09/include/xen/interface/domctl.h 2009-05-19 09:16:41.000000000 +0200
@@ -0,0 +1,710 @@
+/******************************************************************************
+ * domctl.h
@@ -2481,7 +2481,7 @@ Acked-by: jbeulich@novell.com
+ * End:
+ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/hvm/e820.h 2007-06-12 13:14:19.000000000 +0200
++++ head-2009-06-09/include/xen/interface/hvm/e820.h 2007-06-12 13:14:19.000000000 +0200
@@ -0,0 +1,34 @@
+
+/*
@@ -2518,7 +2518,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __XEN_PUBLIC_HVM_E820_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/hvm/hvm_info_table.h 2009-04-07 13:58:49.000000000 +0200
++++ head-2009-06-09/include/xen/interface/hvm/hvm_info_table.h 2009-04-07 13:58:49.000000000 +0200
@@ -0,0 +1,69 @@
+/******************************************************************************
+ * hvm/hvm_info_table.h
@@ -2590,7 +2590,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __XEN_PUBLIC_HVM_HVM_INFO_TABLE_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/hvm/hvm_op.h 2008-09-01 12:07:31.000000000 +0200
++++ head-2009-06-09/include/xen/interface/hvm/hvm_op.h 2008-09-01 12:07:31.000000000 +0200
@@ -0,0 +1,131 @@
+/*
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -2724,7 +2724,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __XEN_PUBLIC_HVM_HVM_OP_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/hvm/ioreq.h 2008-04-02 12:34:02.000000000 +0200
++++ head-2009-06-09/include/xen/interface/hvm/ioreq.h 2008-04-02 12:34:02.000000000 +0200
@@ -0,0 +1,127 @@
+/*
+ * ioreq.h: I/O request definitions for device models
@@ -2854,7 +2854,7 @@ Acked-by: jbeulich@novell.com
+ * End:
+ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/hvm/params.h 2009-04-07 13:58:49.000000000 +0200
++++ head-2009-06-09/include/xen/interface/hvm/params.h 2009-04-07 13:58:49.000000000 +0200
@@ -0,0 +1,111 @@
+/*
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -2968,7 +2968,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __XEN_PUBLIC_HVM_PARAMS_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/hvm/save.h 2008-04-02 12:34:02.000000000 +0200
++++ head-2009-06-09/include/xen/interface/hvm/save.h 2008-04-02 12:34:02.000000000 +0200
@@ -0,0 +1,88 @@
+/*
+ * hvm/save.h
@@ -3059,7 +3059,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __XEN_PUBLIC_HVM_SAVE_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/io/fsif.h 2009-04-07 13:58:49.000000000 +0200
++++ head-2009-06-09/include/xen/interface/io/fsif.h 2009-04-07 13:58:49.000000000 +0200
@@ -0,0 +1,192 @@
+/******************************************************************************
+ * fsif.h
@@ -3254,7 +3254,7 @@ Acked-by: jbeulich@novell.com
+
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/io/pciif.h 2009-04-07 13:58:49.000000000 +0200
++++ head-2009-06-09/include/xen/interface/io/pciif.h 2009-04-07 13:58:49.000000000 +0200
@@ -0,0 +1,124 @@
+/*
+ * PCI Backend/Frontend Common Data Structures & Macros
@@ -3381,7 +3381,7 @@ Acked-by: jbeulich@novell.com
+ * End:
+ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/io/tpmif.h 2007-06-12 13:14:19.000000000 +0200
++++ head-2009-06-09/include/xen/interface/io/tpmif.h 2007-06-12 13:14:19.000000000 +0200
@@ -0,0 +1,77 @@
+/******************************************************************************
+ * tpmif.h
@@ -3461,7 +3461,7 @@ Acked-by: jbeulich@novell.com
+ * End:
+ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/io/usbif.h 2009-04-07 13:58:49.000000000 +0200
++++ head-2009-06-09/include/xen/interface/io/usbif.h 2009-04-07 13:58:49.000000000 +0200
@@ -0,0 +1,121 @@
+/*
+ * usbif.h
@@ -3585,7 +3585,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __XEN_PUBLIC_IO_USBIF_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/io/vscsiif.h 2008-07-21 11:00:33.000000000 +0200
++++ head-2009-06-09/include/xen/interface/io/vscsiif.h 2008-07-21 11:00:33.000000000 +0200
@@ -0,0 +1,105 @@
+/******************************************************************************
+ * vscsiif.h
@@ -3693,7 +3693,7 @@ Acked-by: jbeulich@novell.com
+ * End:
+ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/kexec.h 2008-11-25 12:22:34.000000000 +0100
++++ head-2009-06-09/include/xen/interface/kexec.h 2008-11-25 12:22:34.000000000 +0100
@@ -0,0 +1,168 @@
+/******************************************************************************
+ * kexec.h - Public portion
@@ -3864,7 +3864,7 @@ Acked-by: jbeulich@novell.com
+ * End:
+ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/nmi.h 2007-06-12 13:14:19.000000000 +0200
++++ head-2009-06-09/include/xen/interface/nmi.h 2007-06-12 13:14:19.000000000 +0200
@@ -0,0 +1,78 @@
+/******************************************************************************
+ * nmi.h
@@ -3945,7 +3945,7 @@ Acked-by: jbeulich@novell.com
+ * End:
+ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/platform.h 2008-09-25 13:55:33.000000000 +0200
++++ head-2009-06-09/include/xen/interface/platform.h 2008-09-25 13:55:33.000000000 +0200
@@ -0,0 +1,346 @@
+/******************************************************************************
+ * platform.h
@@ -4294,7 +4294,7 @@ Acked-by: jbeulich@novell.com
+ * End:
+ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/sysctl.h 2009-05-19 09:16:41.000000000 +0200
++++ head-2009-06-09/include/xen/interface/sysctl.h 2009-05-19 09:16:41.000000000 +0200
@@ -0,0 +1,490 @@
+/******************************************************************************
+ * sysctl.h
@@ -4787,7 +4787,7 @@ Acked-by: jbeulich@novell.com
+ * End:
+ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/trace.h 2009-05-19 09:16:41.000000000 +0200
++++ head-2009-06-09/include/xen/interface/trace.h 2009-05-19 09:16:41.000000000 +0200
@@ -0,0 +1,207 @@
+/******************************************************************************
+ * include/public/trace.h
@@ -4997,7 +4997,7 @@ Acked-by: jbeulich@novell.com
+ * End:
+ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/xen-compat.h 2008-09-01 12:07:31.000000000 +0200
++++ head-2009-06-09/include/xen/interface/xen-compat.h 2008-09-01 12:07:31.000000000 +0200
@@ -0,0 +1,44 @@
+/******************************************************************************
+ * xen-compat.h
@@ -5044,7 +5044,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __XEN_PUBLIC_XEN_COMPAT_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/xenoprof.h 2007-06-12 13:14:19.000000000 +0200
++++ head-2009-06-09/include/xen/interface/xenoprof.h 2007-06-12 13:14:19.000000000 +0200
@@ -0,0 +1,138 @@
+/******************************************************************************
+ * xenoprof.h
@@ -5185,7 +5185,7 @@ Acked-by: jbeulich@novell.com
+ * End:
+ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/xsm/acm.h 2008-07-21 11:00:33.000000000 +0200
++++ head-2009-06-09/include/xen/interface/xsm/acm.h 2008-07-21 11:00:33.000000000 +0200
@@ -0,0 +1,235 @@
+/*
+ * acm.h: Xen access control module interface defintions
@@ -5423,7 +5423,7 @@ Acked-by: jbeulich@novell.com
+ * End:
+ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/xsm/acm_ops.h 2007-10-22 13:39:15.000000000 +0200
++++ head-2009-06-09/include/xen/interface/xsm/acm_ops.h 2007-10-22 13:39:15.000000000 +0200
@@ -0,0 +1,159 @@
+/*
+ * acm_ops.h: Xen access control module hypervisor commands
@@ -5585,7 +5585,7 @@ Acked-by: jbeulich@novell.com
+ * End:
+ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/interface/xsm/flask_op.h 2008-09-01 12:07:31.000000000 +0200
++++ head-2009-06-09/include/xen/interface/xsm/flask_op.h 2008-09-01 12:07:31.000000000 +0200
@@ -0,0 +1,45 @@
+/*
+ * This file contains the flask_op hypercall commands and definitions.
diff --git a/patches.xen/xen3-auto-xen-arch.diff b/patches.xen/xen3-auto-xen-arch.diff
index 98e1f48cff..d85806f532 100644
--- a/patches.xen/xen3-auto-xen-arch.diff
+++ b/patches.xen/xen3-auto-xen-arch.diff
@@ -1,5 +1,5 @@
Subject: xen3 xen-arch
-From: http://xenbits.xensource.com/linux-2.6.18-xen.hg (tip 873:57acc535fd37)
+From: http://xenbits.xensource.com/linux-2.6.18-xen.hg (tip 898:ca12928cdafe)
Patch-mainline: obsolete
Acked-by: jbeulich@novell.com
@@ -115,7 +115,7 @@ for reference, prefixed with the version the removal occured):
2.6.30/arch/x86/kernel/setup_percpu-xen.c (added in 2.6.27)
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/acpi/processor_extcntl_xen.c 2008-10-01 15:43:24.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/acpi/processor_extcntl_xen.c 2008-10-01 15:43:24.000000000 +0200
@@ -0,0 +1,209 @@
+/*
+ * processor_extcntl_xen.c - interface to notify Xen
@@ -327,7 +327,7 @@ for reference, prefixed with the version the removal occured):
+}
+EXPORT_SYMBOL(arch_acpi_processor_init_extcntl);
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/acpi/sleep_32-xen.c 2008-04-15 09:29:41.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/acpi/sleep_32-xen.c 2008-04-15 09:29:41.000000000 +0200
@@ -0,0 +1,113 @@
+/*
+ * sleep.c - x86-specific ACPI sleep support.
@@ -443,7 +443,7 @@ for reference, prefixed with the version the removal occured):
+core_initcall(acpisleep_dmi_init);
+#endif /* CONFIG_ACPI_PV_SLEEP */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/apic_32-xen.c 2007-06-12 13:12:48.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/apic_32-xen.c 2007-06-12 13:12:48.000000000 +0200
@@ -0,0 +1,155 @@
+/*
+ * Local APIC handling, local APIC timers
@@ -601,7 +601,7 @@ for reference, prefixed with the version the removal occured):
+ return 0;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/cpu/common-xen.c 2009-05-19 09:16:41.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/cpu/common-xen.c 2009-05-19 09:16:41.000000000 +0200
@@ -0,0 +1,745 @@
+#include <linux/init.h>
+#include <linux/string.h>
@@ -1349,7 +1349,7 @@ for reference, prefixed with the version the removal occured):
+}
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/cpu/mtrr/main-xen.c 2008-01-28 12:24:18.000000000 +0100
++++ head-2009-06-09/arch/x86/kernel/cpu/mtrr/main-xen.c 2008-01-28 12:24:18.000000000 +0100
@@ -0,0 +1,198 @@
+#include <linux/init.h>
+#include <linux/proc_fs.h>
@@ -1550,7 +1550,7 @@ for reference, prefixed with the version the removal occured):
+
+subsys_initcall(mtrr_init);
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/entry_32-xen.S 2009-05-19 09:16:41.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/entry_32-xen.S 2009-05-19 09:16:41.000000000 +0200
@@ -0,0 +1,1242 @@
+/*
+ * linux/arch/i386/entry.S
@@ -2795,7 +2795,7 @@ for reference, prefixed with the version the removal occured):
+
+syscall_table_size=(.-sys_call_table)
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/fixup.c 2008-01-28 12:24:18.000000000 +0100
++++ head-2009-06-09/arch/x86/kernel/fixup.c 2008-01-28 12:24:18.000000000 +0100
@@ -0,0 +1,88 @@
+/******************************************************************************
+ * fixup.c
@@ -2886,7 +2886,7 @@ for reference, prefixed with the version the removal occured):
+}
+__initcall(fixup_init);
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/head_32-xen.S 2007-06-12 13:12:48.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/head_32-xen.S 2007-06-12 13:12:48.000000000 +0200
@@ -0,0 +1,207 @@
+
+
@@ -3096,7 +3096,7 @@ for reference, prefixed with the version the removal occured):
+ ELFNOTE(Xen, XEN_ELFNOTE_LOADER, .asciz, "generic")
+ ELFNOTE(Xen, XEN_ELFNOTE_SUSPEND_CANCEL, .long, 1)
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/init_task-xen.c 2007-06-12 13:12:48.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/init_task-xen.c 2007-06-12 13:12:48.000000000 +0200
@@ -0,0 +1,51 @@
+#include <linux/mm.h>
+#include <linux/module.h>
@@ -3150,7 +3150,7 @@ for reference, prefixed with the version the removal occured):
+#endif
+
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/io_apic_32-xen.c 2009-03-18 10:39:31.000000000 +0100
++++ head-2009-06-09/arch/x86/kernel/io_apic_32-xen.c 2009-03-18 10:39:31.000000000 +0100
@@ -0,0 +1,2786 @@
+/*
+ * Intel IO-APIC support for multi-Pentium hosts.
@@ -5939,7 +5939,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* CONFIG_ACPI */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/ioport_32-xen.c 2008-01-28 12:24:19.000000000 +0100
++++ head-2009-06-09/arch/x86/kernel/ioport_32-xen.c 2008-01-28 12:24:19.000000000 +0100
@@ -0,0 +1,123 @@
+/*
+ * linux/arch/i386/kernel/ioport.c
@@ -6065,7 +6065,7 @@ for reference, prefixed with the version the removal occured):
+ return 0;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/irq_32-xen.c 2008-10-29 09:55:56.000000000 +0100
++++ head-2009-06-09/arch/x86/kernel/irq_32-xen.c 2008-10-29 09:55:56.000000000 +0100
@@ -0,0 +1,324 @@
+/*
+ * linux/arch/i386/kernel/irq.c
@@ -6392,7 +6392,7 @@ for reference, prefixed with the version the removal occured):
+#endif
+
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/ldt_32-xen.c 2007-06-12 13:12:48.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/ldt_32-xen.c 2007-06-12 13:12:48.000000000 +0200
@@ -0,0 +1,270 @@
+/*
+ * linux/kernel/ldt.c
@@ -6665,7 +6665,7 @@ for reference, prefixed with the version the removal occured):
+ return ret;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/microcode-xen.c 2007-06-12 13:12:48.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/microcode-xen.c 2007-06-12 13:12:48.000000000 +0200
@@ -0,0 +1,144 @@
+/*
+ * Intel CPU Microcode Update Driver for Linux
@@ -6812,7 +6812,7 @@ for reference, prefixed with the version the removal occured):
+module_exit(microcode_exit)
+MODULE_ALIAS_MISCDEV(MICROCODE_MINOR);
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/mpparse_32-xen.c 2007-06-12 13:12:48.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/mpparse_32-xen.c 2007-06-12 13:12:48.000000000 +0200
@@ -0,0 +1,1185 @@
+/*
+ * Intel Multiprocessor Specification 1.1 and 1.4
@@ -8000,7 +8000,7 @@ for reference, prefixed with the version the removal occured):
+#endif /* CONFIG_X86_IO_APIC */
+#endif /* CONFIG_ACPI */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/pci-dma-xen.c 2008-10-29 09:55:56.000000000 +0100
++++ head-2009-06-09/arch/x86/kernel/pci-dma-xen.c 2008-10-29 09:55:56.000000000 +0100
@@ -0,0 +1,409 @@
+/*
+ * Dynamic DMA mapping support.
@@ -8412,7 +8412,7 @@ for reference, prefixed with the version the removal occured):
+}
+EXPORT_SYMBOL(dma_sync_single_for_device);
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/process_32-xen.c 2008-07-21 11:00:32.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/process_32-xen.c 2008-07-21 11:00:32.000000000 +0200
@@ -0,0 +1,877 @@
+/*
+ * linux/arch/i386/kernel/process.c
@@ -9292,7 +9292,7 @@ for reference, prefixed with the version the removal occured):
+ return sp & ~0xf;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/quirks-xen.c 2008-01-28 12:24:19.000000000 +0100
++++ head-2009-06-09/arch/x86/kernel/quirks-xen.c 2008-01-28 12:24:19.000000000 +0100
@@ -0,0 +1,47 @@
+/*
+ * This file contains work-arounds for x86 and x86_64 platform bugs.
@@ -9342,7 +9342,7 @@ for reference, prefixed with the version the removal occured):
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7520_MCH, quirk_intel_irqbalance);
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/setup_32-xen.c 2008-04-22 15:41:51.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/setup_32-xen.c 2008-04-22 15:41:51.000000000 +0200
@@ -0,0 +1,1919 @@
+/*
+ * linux/arch/i386/kernel/setup.c
@@ -11264,7 +11264,7 @@ for reference, prefixed with the version the removal occured):
+ * End:
+ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/smp_32-xen.c 2007-12-10 08:47:31.000000000 +0100
++++ head-2009-06-09/arch/x86/kernel/smp_32-xen.c 2007-12-10 08:47:31.000000000 +0100
@@ -0,0 +1,605 @@
+/*
+ * Intel SMP support routines.
@@ -11872,7 +11872,7 @@ for reference, prefixed with the version the removal occured):
+}
+
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/time_32-xen.c 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/time_32-xen.c 2009-04-07 13:58:48.000000000 +0200
@@ -0,0 +1,1208 @@
+/*
+ * linux/arch/i386/kernel/time.c
@@ -13083,7 +13083,7 @@ for reference, prefixed with the version the removal occured):
+}
+__initcall(xen_sysctl_init);
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/traps_32-xen.c 2008-04-02 12:34:02.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/traps_32-xen.c 2008-04-02 12:34:02.000000000 +0200
@@ -0,0 +1,1190 @@
+/*
+ * linux/arch/i386/traps.c
@@ -14276,7 +14276,7 @@ for reference, prefixed with the version the removal occured):
+__setup("call_trace=", call_trace_setup);
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/mach-xen/Makefile 2007-06-12 13:12:48.000000000 +0200
++++ head-2009-06-09/arch/x86/mach-xen/Makefile 2007-06-12 13:12:48.000000000 +0200
@@ -0,0 +1,5 @@
+#
+# Makefile for the linux kernel.
@@ -14284,7 +14284,7 @@ for reference, prefixed with the version the removal occured):
+
+obj-y := setup.o
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/mach-xen/setup.c 2008-04-02 12:34:02.000000000 +0200
++++ head-2009-06-09/arch/x86/mach-xen/setup.c 2008-04-02 12:34:02.000000000 +0200
@@ -0,0 +1,158 @@
+/*
+ * Machine specific setup for generic
@@ -14445,7 +14445,7 @@ for reference, prefixed with the version the removal occured):
+#endif
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/lib/scrub.c 2008-02-08 12:30:51.000000000 +0100
++++ head-2009-06-09/arch/x86/lib/scrub.c 2008-02-08 12:30:51.000000000 +0100
@@ -0,0 +1,21 @@
+#include <asm/cpufeature.h>
+#include <asm/page.h>
@@ -14469,7 +14469,7 @@ for reference, prefixed with the version the removal occured):
+ clear_page(v);
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/mm/fault_32-xen.c 2007-12-10 08:47:31.000000000 +0100
++++ head-2009-06-09/arch/x86/mm/fault_32-xen.c 2007-12-10 08:47:31.000000000 +0100
@@ -0,0 +1,779 @@
+/*
+ * linux/arch/i386/mm/fault.c
@@ -15251,7 +15251,7 @@ for reference, prefixed with the version the removal occured):
+}
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/mm/highmem_32-xen.c 2008-10-29 09:55:56.000000000 +0100
++++ head-2009-06-09/arch/x86/mm/highmem_32-xen.c 2008-10-29 09:55:56.000000000 +0100
@@ -0,0 +1,183 @@
+#include <linux/highmem.h>
+#include <linux/module.h>
@@ -15437,8 +15437,8 @@ for reference, prefixed with the version the removal occured):
+EXPORT_SYMBOL(clear_highpage);
+EXPORT_SYMBOL(copy_highpage);
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/mm/hypervisor.c 2009-03-18 10:39:31.000000000 +0100
-@@ -0,0 +1,575 @@
++++ head-2009-06-09/arch/x86/mm/hypervisor.c 2009-06-09 15:01:37.000000000 +0200
+@@ -0,0 +1,579 @@
+/******************************************************************************
+ * mm/hypervisor.c
+ *
@@ -15563,6 +15563,7 @@ for reference, prefixed with the version the removal occured):
+ op.cmd = MMUEXT_TLB_FLUSH_ALL;
+ BUG_ON(HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF) < 0);
+}
++EXPORT_SYMBOL_GPL(xen_tlb_flush_all);
+
+void xen_tlb_flush_mask(cpumask_t *mask)
+{
@@ -15573,6 +15574,7 @@ for reference, prefixed with the version the removal occured):
+ set_xen_guest_handle(op.arg2.vcpumask, mask->bits);
+ BUG_ON(HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF) < 0);
+}
++EXPORT_SYMBOL_GPL(xen_tlb_flush_mask);
+
+void xen_invlpg_all(unsigned long ptr)
+{
@@ -15581,6 +15583,7 @@ for reference, prefixed with the version the removal occured):
+ op.arg1.linear_addr = ptr & PAGE_MASK;
+ BUG_ON(HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF) < 0);
+}
++EXPORT_SYMBOL_GPL(xen_invlpg_all);
+
+void xen_invlpg_mask(cpumask_t *mask, unsigned long ptr)
+{
@@ -15592,6 +15595,7 @@ for reference, prefixed with the version the removal occured):
+ set_xen_guest_handle(op.arg2.vcpumask, mask->bits);
+ BUG_ON(HYPERVISOR_mmuext_op(&op, 1, NULL, DOMID_SELF) < 0);
+}
++EXPORT_SYMBOL_GPL(xen_invlpg_mask);
+
+#endif /* CONFIG_SMP */
+
@@ -16015,7 +16019,7 @@ for reference, prefixed with the version the removal occured):
+ return !rc;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/mm/init_32-xen.c 2008-10-29 09:55:56.000000000 +0100
++++ head-2009-06-09/arch/x86/mm/init_32-xen.c 2008-10-29 09:55:56.000000000 +0100
@@ -0,0 +1,840 @@
+/*
+ * linux/arch/i386/mm/init.c
@@ -16858,7 +16862,7 @@ for reference, prefixed with the version the removal occured):
+#endif
+
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/mm/ioremap_32-xen.c 2008-04-02 12:34:02.000000000 +0200
++++ head-2009-06-09/arch/x86/mm/ioremap_32-xen.c 2008-04-02 12:34:02.000000000 +0200
@@ -0,0 +1,443 @@
+/*
+ * arch/i386/mm/ioremap.c
@@ -17304,7 +17308,7 @@ for reference, prefixed with the version the removal occured):
+ }
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/mm/pgtable_32-xen.c 2009-03-18 10:39:31.000000000 +0100
++++ head-2009-06-09/arch/x86/mm/pgtable_32-xen.c 2009-03-18 10:39:31.000000000 +0100
@@ -0,0 +1,731 @@
+/*
+ * linux/arch/i386/mm/pgtable.c
@@ -18038,7 +18042,7 @@ for reference, prefixed with the version the removal occured):
+ mm_unpin(mm);
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/oprofile/xenoprof.c 2008-01-28 12:24:19.000000000 +0100
++++ head-2009-06-09/arch/x86/oprofile/xenoprof.c 2008-01-28 12:24:19.000000000 +0100
@@ -0,0 +1,179 @@
+/**
+ * @file xenoprof.c
@@ -18220,7 +18224,7 @@ for reference, prefixed with the version the removal occured):
+ xenoprofile_exit();
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/pci/irq-xen.c 2008-03-06 08:54:32.000000000 +0100
++++ head-2009-06-09/arch/x86/pci/irq-xen.c 2008-03-06 08:54:32.000000000 +0100
@@ -0,0 +1,1211 @@
+/*
+ * Low-Level PCI Support for PC -- Routing of Interrupts
@@ -19434,7 +19438,7 @@ for reference, prefixed with the version the removal occured):
+ return count;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/pci/pcifront.c 2009-03-18 10:39:31.000000000 +0100
++++ head-2009-06-09/arch/x86/pci/pcifront.c 2009-03-18 10:39:31.000000000 +0100
@@ -0,0 +1,57 @@
+/*
+ * PCI Frontend Stub - puts some "dummy" functions in to the Linux x86 PCI core
@@ -19494,7 +19498,7 @@ for reference, prefixed with the version the removal occured):
+
+arch_initcall(pcifront_x86_stub_init);
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/ia32/ia32entry-xen.S 2008-04-02 12:34:02.000000000 +0200
++++ head-2009-06-09/arch/x86/ia32/ia32entry-xen.S 2008-04-02 12:34:02.000000000 +0200
@@ -0,0 +1,666 @@
+/*
+ * Compatibility mode system call entry point for x86-64.
@@ -20163,7 +20167,7 @@ for reference, prefixed with the version the removal occured):
+ .quad compat_sys_move_pages
+ia32_syscall_end:
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/acpi/sleep_64-xen.c 2008-04-15 09:29:41.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/acpi/sleep_64-xen.c 2008-04-15 09:29:41.000000000 +0200
@@ -0,0 +1,146 @@
+/*
+ * acpi.c - Architecture-Specific Low-Level ACPI Support
@@ -20312,7 +20316,7 @@ for reference, prefixed with the version the removal occured):
+{
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/apic_64-xen.c 2007-06-12 13:13:01.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/apic_64-xen.c 2007-06-12 13:13:01.000000000 +0200
@@ -0,0 +1,197 @@
+/*
+ * Local APIC handling, local APIC timers
@@ -20512,7 +20516,7 @@ for reference, prefixed with the version the removal occured):
+ return 1;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/e820_64-xen.c 2008-04-22 19:56:27.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/e820_64-xen.c 2008-04-22 19:56:27.000000000 +0200
@@ -0,0 +1,798 @@
+/*
+ * Handle the memory map.
@@ -21313,7 +21317,7 @@ for reference, prefixed with the version the removal occured):
+ pci_mem_start, gapstart, gapsize);
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/early_printk-xen.c 2007-06-12 13:13:01.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/early_printk-xen.c 2007-06-12 13:13:01.000000000 +0200
@@ -0,0 +1,302 @@
+#include <linux/console.h>
+#include <linux/kernel.h>
@@ -21618,7 +21622,7 @@ for reference, prefixed with the version the removal occured):
+
+__setup("earlyprintk=", setup_early_printk);
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/entry_64-xen.S 2008-10-29 09:55:56.000000000 +0100
++++ head-2009-06-09/arch/x86/kernel/entry_64-xen.S 2008-10-29 09:55:56.000000000 +0100
@@ -0,0 +1,1322 @@
+/*
+ * linux/arch/x86_64/entry.S
@@ -22943,7 +22947,7 @@ for reference, prefixed with the version the removal occured):
+ENDPROC(arch_unwind_init_running)
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/head_64-xen.S 2007-08-06 15:10:49.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/head_64-xen.S 2007-08-06 15:10:49.000000000 +0200
@@ -0,0 +1,214 @@
+/*
+ * linux/arch/x86_64/kernel/head.S -- start in 32bit and switch to 64bit
@@ -23160,7 +23164,7 @@ for reference, prefixed with the version the removal occured):
+ ELFNOTE(Xen, XEN_ELFNOTE_LOADER, .asciz, "generic")
+ ELFNOTE(Xen, XEN_ELFNOTE_SUSPEND_CANCEL, .long, 1)
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/head64-xen.c 2007-06-12 13:13:01.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/head64-xen.c 2007-06-12 13:13:01.000000000 +0200
@@ -0,0 +1,162 @@
+/*
+ * linux/arch/x86_64/kernel/head64.c -- prepare to run common code
@@ -23325,7 +23329,7 @@ for reference, prefixed with the version the removal occured):
+ start_kernel();
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/io_apic_64-xen.c 2009-03-18 10:39:31.000000000 +0100
++++ head-2009-06-09/arch/x86/kernel/io_apic_64-xen.c 2009-03-18 10:39:31.000000000 +0100
@@ -0,0 +1,2270 @@
+/*
+ * Intel IO-APIC support for multi-Pentium hosts.
@@ -25598,7 +25602,7 @@ for reference, prefixed with the version the removal occured):
+#endif
+#endif /* !CONFIG_XEN */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/ioport_64-xen.c 2008-01-28 12:24:19.000000000 +0100
++++ head-2009-06-09/arch/x86/kernel/ioport_64-xen.c 2008-01-28 12:24:19.000000000 +0100
@@ -0,0 +1,100 @@
+/*
+ * linux/arch/x86_64/kernel/ioport.c
@@ -25701,7 +25705,7 @@ for reference, prefixed with the version the removal occured):
+ return 0;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/irq_64-xen.c 2008-10-29 09:55:56.000000000 +0100
++++ head-2009-06-09/arch/x86/kernel/irq_64-xen.c 2008-10-29 09:55:56.000000000 +0100
@@ -0,0 +1,197 @@
+/*
+ * linux/arch/x86_64/kernel/irq.c
@@ -25901,7 +25905,7 @@ for reference, prefixed with the version the removal occured):
+}
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/ldt_64-xen.c 2007-06-12 13:13:01.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/ldt_64-xen.c 2007-06-12 13:13:01.000000000 +0200
@@ -0,0 +1,282 @@
+/*
+ * linux/arch/x86_64/kernel/ldt.c
@@ -26186,7 +26190,7 @@ for reference, prefixed with the version the removal occured):
+ return ret;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/mpparse_64-xen.c 2007-06-12 13:13:01.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/mpparse_64-xen.c 2007-06-12 13:13:01.000000000 +0200
@@ -0,0 +1,1011 @@
+/*
+ * Intel Multiprocessor Specification 1.1 and 1.4
@@ -27200,7 +27204,7 @@ for reference, prefixed with the version the removal occured):
+#endif /*CONFIG_X86_IO_APIC*/
+#endif /*CONFIG_ACPI*/
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/process_64-xen.c 2008-08-07 12:44:36.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/process_64-xen.c 2008-08-07 12:44:36.000000000 +0200
@@ -0,0 +1,848 @@
+/*
+ * linux/arch/x86-64/kernel/process.c
@@ -28051,7 +28055,7 @@ for reference, prefixed with the version the removal occured):
+ return sp & ~0xf;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/setup_64-xen.c 2009-05-19 09:16:41.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/setup_64-xen.c 2009-05-19 09:16:41.000000000 +0200
@@ -0,0 +1,1654 @@
+/*
+ * linux/arch/x86-64/kernel/setup.c
@@ -29708,7 +29712,7 @@ for reference, prefixed with the version the removal occured):
+device_initcall(add_pcspkr);
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/setup64-xen.c 2008-01-28 12:24:19.000000000 +0100
++++ head-2009-06-09/arch/x86/kernel/setup64-xen.c 2008-01-28 12:24:19.000000000 +0100
@@ -0,0 +1,367 @@
+/*
+ * X86-64 specific CPU setup.
@@ -30078,7 +30082,7 @@ for reference, prefixed with the version the removal occured):
+ raw_local_save_flags(kernel_eflags);
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/smp_64-xen.c 2008-04-02 12:34:02.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/smp_64-xen.c 2008-04-02 12:34:02.000000000 +0200
@@ -0,0 +1,575 @@
+/*
+ * Intel SMP support routines.
@@ -30656,7 +30660,7 @@ for reference, prefixed with the version the removal occured):
+#endif
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/traps_64-xen.c 2008-04-02 12:34:02.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/traps_64-xen.c 2008-04-02 12:34:02.000000000 +0200
@@ -0,0 +1,1173 @@
+/*
+ * linux/arch/x86-64/traps.c
@@ -31832,7 +31836,7 @@ for reference, prefixed with the version the removal occured):
+__setup("call_trace=", call_trace_setup);
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/vsyscall_64-xen.c 2007-06-18 08:38:13.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/vsyscall_64-xen.c 2007-06-18 08:38:13.000000000 +0200
@@ -0,0 +1,227 @@
+/*
+ * linux/arch/x86_64/kernel/vsyscall.c
@@ -32062,7 +32066,7 @@ for reference, prefixed with the version the removal occured):
+
+__initcall(vsyscall_init);
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/xen_entry_64.S 2008-04-02 12:34:02.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/xen_entry_64.S 2008-04-02 12:34:02.000000000 +0200
@@ -0,0 +1,36 @@
+/*
+ * Copied from arch/xen/i386/kernel/entry.S
@@ -32101,7 +32105,7 @@ for reference, prefixed with the version the removal occured):
+ XEN_PUT_VCPU_INFO(reg)
+#define XEN_TEST_PENDING(reg) testb $0xFF,evtchn_upcall_pending(reg)
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/mm/fault_64-xen.c 2007-11-02 17:34:23.000000000 +0100
++++ head-2009-06-09/arch/x86/mm/fault_64-xen.c 2007-11-02 17:34:23.000000000 +0100
@@ -0,0 +1,724 @@
+/*
+ * linux/arch/x86-64/mm/fault.c
@@ -32828,7 +32832,7 @@ for reference, prefixed with the version the removal occured):
+}
+__setup("pagefaulttrace", enable_pagefaulttrace);
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/mm/init_64-xen.c 2008-10-29 09:55:56.000000000 +0100
++++ head-2009-06-09/arch/x86/mm/init_64-xen.c 2009-06-09 15:01:37.000000000 +0200
@@ -0,0 +1,1206 @@
+/*
+ * linux/arch/x86_64/mm/init.c
@@ -33289,9 +33293,9 @@ for reference, prefixed with the version the removal occured):
+ for (k = 0; k < PTRS_PER_PTE; pte++, k++, address += PTE_SIZE) {
+ unsigned long pteval = address | _PAGE_NX | _KERNPG_TABLE;
+
-+ if (address >= (after_bootmem
-+ ? end
-+ : xen_start_info->nr_pages << PAGE_SHIFT))
++ if (address >= end ||
++ (!after_bootmem &&
++ (address >> PAGE_SHIFT) >= xen_start_info->nr_pages))
+ pteval = 0;
+ else if (make_readonly(address))
+ pteval &= ~_PAGE_RW;
@@ -34037,7 +34041,7 @@ for reference, prefixed with the version the removal occured):
+ return (addr >= VSYSCALL_START) && (addr < VSYSCALL_END);
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/mm/pageattr_64-xen.c 2009-03-18 10:39:31.000000000 +0100
++++ head-2009-06-09/arch/x86/mm/pageattr_64-xen.c 2009-03-18 10:39:31.000000000 +0100
@@ -0,0 +1,508 @@
+/*
+ * Copyright 2002 Andi Kleen, SuSE Labs.
@@ -34548,7 +34552,7 @@ for reference, prefixed with the version the removal occured):
+EXPORT_SYMBOL(change_page_attr);
+EXPORT_SYMBOL(global_flush_tlb);
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/pci/msi-xen.c 2009-04-07 16:06:58.000000000 +0200
++++ head-2009-06-09/drivers/pci/msi-xen.c 2009-04-07 16:06:58.000000000 +0200
@@ -0,0 +1,890 @@
+/*
+ * File: msi.c
@@ -35441,7 +35445,7 @@ for reference, prefixed with the version the removal occured):
+#endif
+
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/agp.h 2007-06-22 09:08:06.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/agp.h 2007-06-22 09:08:06.000000000 +0200
@@ -0,0 +1,44 @@
+#ifndef AGP_H
+#define AGP_H 1
@@ -35488,7 +35492,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/desc_32.h 2008-01-28 12:24:19.000000000 +0100
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/desc_32.h 2008-01-28 12:24:19.000000000 +0100
@@ -0,0 +1,166 @@
+#ifndef __ARCH_DESC_H
+#define __ARCH_DESC_H
@@ -35657,7 +35661,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/dma-mapping_32.h 2008-04-02 12:34:02.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/dma-mapping_32.h 2008-04-02 12:34:02.000000000 +0200
@@ -0,0 +1,151 @@
+#ifndef _ASM_I386_DMA_MAPPING_H
+#define _ASM_I386_DMA_MAPPING_H
@@ -35811,7 +35815,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/fixmap_32.h 2007-06-12 13:14:02.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/fixmap_32.h 2007-06-12 13:14:02.000000000 +0200
@@ -0,0 +1,155 @@
+/*
+ * fixmap.h: compile-time virtual memory allocation
@@ -35969,7 +35973,7 @@ for reference, prefixed with the version the removal occured):
+#endif /* !__ASSEMBLY__ */
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/gnttab_dma.h 2007-08-06 15:10:49.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/gnttab_dma.h 2007-08-06 15:10:49.000000000 +0200
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2007 Herbert Xu <herbert@gondor.apana.org.au>
@@ -36013,7 +36017,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* _ASM_I386_GNTTAB_DMA_H */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/highmem.h 2008-10-29 09:55:56.000000000 +0100
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/highmem.h 2008-10-29 09:55:56.000000000 +0100
@@ -0,0 +1,97 @@
+/*
+ * highmem.h: virtual kernel memory mappings for high memory
@@ -36113,7 +36117,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* _ASM_HIGHMEM_H */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/hypercall_32.h 2008-11-25 12:22:34.000000000 +0100
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/hypercall_32.h 2008-11-25 12:22:34.000000000 +0100
@@ -0,0 +1,409 @@
+/******************************************************************************
+ * hypercall.h
@@ -36525,7 +36529,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* __HYPERCALL_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/hypervisor.h 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/hypervisor.h 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,259 @@
+/******************************************************************************
+ * hypervisor.h
@@ -36787,7 +36791,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* __HYPERVISOR_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/irqflags_32.h 2007-06-12 13:14:02.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/irqflags_32.h 2007-06-12 13:14:02.000000000 +0200
@@ -0,0 +1,127 @@
+/*
+ * include/asm-i386/irqflags.h
@@ -36917,7 +36921,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/maddr_32.h 2008-04-02 12:34:02.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/maddr_32.h 2008-04-02 12:34:02.000000000 +0200
@@ -0,0 +1,193 @@
+#ifndef _I386_MADDR_H
+#define _I386_MADDR_H
@@ -37113,7 +37117,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* _I386_MADDR_H */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/mmu_context_32.h 2007-06-12 13:14:02.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/mmu_context_32.h 2007-06-12 13:14:02.000000000 +0200
@@ -0,0 +1,108 @@
+#ifndef __I386_SCHED_H
+#define __I386_SCHED_H
@@ -37224,7 +37228,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/pci_32.h 2007-09-14 11:14:51.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/pci_32.h 2007-09-14 11:14:51.000000000 +0200
@@ -0,0 +1,148 @@
+#ifndef __i386_PCI_H
+#define __i386_PCI_H
@@ -37375,7 +37379,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* __i386_PCI_H */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/pgalloc_32.h 2008-07-21 11:00:33.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/pgalloc_32.h 2008-07-21 11:00:33.000000000 +0200
@@ -0,0 +1,59 @@
+#ifndef _I386_PGALLOC_H
+#define _I386_PGALLOC_H
@@ -37437,7 +37441,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* _I386_PGALLOC_H */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/pgtable-3level-defs.h 2007-06-12 13:14:02.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/pgtable-3level-defs.h 2007-06-12 13:14:02.000000000 +0200
@@ -0,0 +1,24 @@
+#ifndef _I386_PGTABLE_3LEVEL_DEFS_H
+#define _I386_PGTABLE_3LEVEL_DEFS_H
@@ -37464,7 +37468,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* _I386_PGTABLE_3LEVEL_DEFS_H */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/pgtable-3level.h 2008-04-02 12:34:02.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/pgtable-3level.h 2008-04-02 12:34:02.000000000 +0200
@@ -0,0 +1,211 @@
+#ifndef _I386_PGTABLE_3LEVEL_H
+#define _I386_PGTABLE_3LEVEL_H
@@ -37678,7 +37682,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* _I386_PGTABLE_3LEVEL_H */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/pgtable_32.h 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/pgtable_32.h 2009-03-18 10:39:32.000000000 +0100
@@ -0,0 +1,550 @@
+#ifndef _I386_PGTABLE_H
+#define _I386_PGTABLE_H
@@ -38231,7 +38235,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* _I386_PGTABLE_H */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/processor_32.h 2008-01-28 12:24:19.000000000 +0100
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/processor_32.h 2008-01-28 12:24:19.000000000 +0100
@@ -0,0 +1,743 @@
+/*
+ * include/asm-i386/processor.h
@@ -38977,7 +38981,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* __ASM_I386_PROCESSOR_H */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/smp_32.h 2007-06-12 13:14:02.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/smp_32.h 2007-06-12 13:14:02.000000000 +0200
@@ -0,0 +1,103 @@
+#ifndef __ASM_SMP_H
+#define __ASM_SMP_H
@@ -39083,7 +39087,7 @@ for reference, prefixed with the version the removal occured):
+#endif
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/swiotlb_32.h 2007-06-12 13:14:02.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/swiotlb_32.h 2007-06-12 13:14:02.000000000 +0200
@@ -0,0 +1,43 @@
+#ifndef _ASM_SWIOTLB_H
+#define _ASM_SWIOTLB_H 1
@@ -39129,7 +39133,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/synch_bitops.h 2008-04-02 12:34:02.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/synch_bitops.h 2008-04-02 12:34:02.000000000 +0200
@@ -0,0 +1,126 @@
+#ifndef __XEN_SYNCH_BITOPS_H__
+#define __XEN_SYNCH_BITOPS_H__
@@ -39258,7 +39262,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* __XEN_SYNCH_BITOPS_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/system_32.h 2007-06-12 13:14:02.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/system_32.h 2007-06-12 13:14:02.000000000 +0200
@@ -0,0 +1,488 @@
+#ifndef __ASM_SYSTEM_H
+#define __ASM_SYSTEM_H
@@ -39749,7 +39753,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/tlbflush_32.h 2007-11-26 16:59:25.000000000 +0100
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/tlbflush_32.h 2007-11-26 16:59:25.000000000 +0100
@@ -0,0 +1,101 @@
+#ifndef _I386_TLBFLUSH_H
+#define _I386_TLBFLUSH_H
@@ -39853,7 +39857,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* _I386_TLBFLUSH_H */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/vga.h 2007-06-12 13:14:02.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/vga.h 2007-06-12 13:14:02.000000000 +0200
@@ -0,0 +1,20 @@
+/*
+ * Access to VGA videoram
@@ -39876,7 +39880,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/xenoprof.h 2007-06-12 13:14:02.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/xenoprof.h 2007-06-12 13:14:02.000000000 +0200
@@ -0,0 +1,48 @@
+/******************************************************************************
+ * asm-i386/mach-xen/asm/xenoprof.h
@@ -39927,7 +39931,7 @@ for reference, prefixed with the version the removal occured):
+#endif /* CONFIG_XEN */
+#endif /* __ASM_XENOPROF_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/irq_vectors.h 2008-09-25 13:55:32.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/irq_vectors.h 2008-09-25 13:55:32.000000000 +0200
@@ -0,0 +1,125 @@
+/*
+ * This file should contain #defines for all of the interrupt vector
@@ -40055,7 +40059,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* _ASM_IRQ_VECTORS_H */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/mach_traps.h 2007-06-12 13:14:02.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/mach_traps.h 2007-06-12 13:14:02.000000000 +0200
@@ -0,0 +1,33 @@
+/*
+ * include/asm-xen/asm-i386/mach-xen/mach_traps.h
@@ -40091,7 +40095,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* !_MACH_TRAPS_H */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/setup_arch.h 2007-06-12 13:14:02.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/setup_arch.h 2007-06-12 13:14:02.000000000 +0200
@@ -0,0 +1,5 @@
+/* Hook to call BIOS initialisation function */
+
@@ -40099,7 +40103,7 @@ for reference, prefixed with the version the removal occured):
+
+void __init machine_specific_arch_setup(void);
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/desc_64.h 2008-01-28 12:24:19.000000000 +0100
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/desc_64.h 2008-01-28 12:24:19.000000000 +0100
@@ -0,0 +1,265 @@
+/* Written 2000 by Andi Kleen */
+#ifndef __ARCH_DESC_H
@@ -40367,7 +40371,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/dma-mapping_64.h 2007-06-12 13:14:13.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/dma-mapping_64.h 2007-06-12 13:14:13.000000000 +0200
@@ -0,0 +1,207 @@
+#ifndef _X8664_DMA_MAPPING_H
+#define _X8664_DMA_MAPPING_H 1
@@ -40577,7 +40581,7 @@ for reference, prefixed with the version the removal occured):
+
+#include <asm-i386/mach-xen/asm/dma-mapping.h>
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/fixmap_64.h 2007-06-12 13:14:13.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/fixmap_64.h 2007-06-12 13:14:13.000000000 +0200
@@ -0,0 +1,112 @@
+/*
+ * fixmap.h: compile-time virtual memory allocation
@@ -40692,7 +40696,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/hypercall_64.h 2008-11-25 12:22:34.000000000 +0100
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/hypercall_64.h 2008-11-25 12:22:34.000000000 +0100
@@ -0,0 +1,408 @@
+/******************************************************************************
+ * hypercall.h
@@ -41103,7 +41107,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* __HYPERCALL_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/irqflags_64.h 2007-06-12 13:14:13.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/irqflags_64.h 2007-06-12 13:14:13.000000000 +0200
@@ -0,0 +1,139 @@
+/*
+ * include/asm-x86_64/irqflags.h
@@ -41245,7 +41249,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/maddr_64.h 2007-06-12 13:14:13.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/maddr_64.h 2007-06-12 13:14:13.000000000 +0200
@@ -0,0 +1,161 @@
+#ifndef _X86_64_MADDR_H
+#define _X86_64_MADDR_H
@@ -41409,7 +41413,7 @@ for reference, prefixed with the version the removal occured):
+#endif /* _X86_64_MADDR_H */
+
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/mmu_context_64.h 2007-06-12 13:14:13.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/mmu_context_64.h 2007-06-12 13:14:13.000000000 +0200
@@ -0,0 +1,136 @@
+#ifndef __X86_64_MMU_CONTEXT_H
+#define __X86_64_MMU_CONTEXT_H
@@ -41548,7 +41552,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/pgalloc_64.h 2007-06-18 08:38:13.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/pgalloc_64.h 2007-06-18 08:38:13.000000000 +0200
@@ -0,0 +1,204 @@
+#ifndef _X86_64_PGALLOC_H
+#define _X86_64_PGALLOC_H
@@ -41755,7 +41759,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* _X86_64_PGALLOC_H */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/pgtable_64.h 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/pgtable_64.h 2009-03-18 10:39:32.000000000 +0100
@@ -0,0 +1,585 @@
+#ifndef _X86_64_PGTABLE_H
+#define _X86_64_PGTABLE_H
@@ -42343,7 +42347,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* _X86_64_PGTABLE_H */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/processor_64.h 2008-03-06 08:54:32.000000000 +0100
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/processor_64.h 2008-03-06 08:54:32.000000000 +0100
@@ -0,0 +1,502 @@
+/*
+ * include/asm-x86_64/processor.h
@@ -42848,7 +42852,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* __ASM_X86_64_PROCESSOR_H */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/smp_64.h 2007-06-12 13:14:13.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/smp_64.h 2007-06-12 13:14:13.000000000 +0200
@@ -0,0 +1,150 @@
+#ifndef __ASM_SMP_H
+#define __ASM_SMP_H
@@ -43001,7 +43005,7 @@ for reference, prefixed with the version the removal occured):
+#endif
+
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/system_64.h 2007-11-26 16:59:25.000000000 +0100
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/system_64.h 2007-11-26 16:59:25.000000000 +0100
@@ -0,0 +1,256 @@
+#ifndef __ASM_SYSTEM_H
+#define __ASM_SYSTEM_H
@@ -43260,7 +43264,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/tlbflush_64.h 2007-11-26 16:59:25.000000000 +0100
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/tlbflush_64.h 2007-11-26 16:59:25.000000000 +0100
@@ -0,0 +1,103 @@
+#ifndef _X8664_TLBFLUSH_H
+#define _X8664_TLBFLUSH_H
@@ -43366,7 +43370,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* _X8664_TLBFLUSH_H */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/xor_64.h 2007-06-12 13:14:13.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/xor_64.h 2007-06-12 13:14:13.000000000 +0200
@@ -0,0 +1,328 @@
+/*
+ * x86-64 changes / gcc fixes from Andi Kleen.
@@ -43697,7 +43701,7 @@ for reference, prefixed with the version the removal occured):
+ deals with a load to a line that is being prefetched. */
+#define XOR_SELECT_TEMPLATE(FASTEST) (&xor_block_sse)
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/setup_arch_post.h 2007-06-12 13:14:13.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/setup_arch_post.h 2007-06-12 13:14:13.000000000 +0200
@@ -0,0 +1,63 @@
+/**
+ * machine_specific_* - Hooks for machine specific setup.
@@ -43763,7 +43767,7 @@ for reference, prefixed with the version the removal occured):
+#endif
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/include/mach-xen/setup_arch_pre.h 2007-06-12 13:14:13.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/setup_arch_pre.h 2007-06-12 13:14:13.000000000 +0200
@@ -0,0 +1,5 @@
+/* Hook to call BIOS initialisation function */
+
@@ -43771,7 +43775,7 @@ for reference, prefixed with the version the removal occured):
+
+static void __init machine_specific_arch_setup(void);
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/balloon.h 2007-06-12 13:14:19.000000000 +0200
++++ head-2009-06-09/include/xen/balloon.h 2007-06-12 13:14:19.000000000 +0200
@@ -0,0 +1,57 @@
+/******************************************************************************
+ * balloon.h
@@ -43831,7 +43835,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* __ASM_BALLOON_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/blkif.h 2008-07-21 11:00:33.000000000 +0200
++++ head-2009-06-09/include/xen/blkif.h 2008-07-21 11:00:33.000000000 +0200
@@ -0,0 +1,123 @@
+/*
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -43957,7 +43961,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* __XEN_BLKIF_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/compat_ioctl.h 2007-07-10 09:42:30.000000000 +0200
++++ head-2009-06-09/include/xen/compat_ioctl.h 2007-07-10 09:42:30.000000000 +0200
@@ -0,0 +1,45 @@
+/*
+ * This program is free software; you can redistribute it and/or
@@ -44005,7 +44009,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* __LINUX_XEN_COMPAT_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/cpu_hotplug.h 2007-08-16 18:07:01.000000000 +0200
++++ head-2009-06-09/include/xen/cpu_hotplug.h 2007-08-16 18:07:01.000000000 +0200
@@ -0,0 +1,41 @@
+#ifndef __XEN_CPU_HOTPLUG_H__
+#define __XEN_CPU_HOTPLUG_H__
@@ -44049,7 +44053,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* __XEN_CPU_HOTPLUG_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/driver_util.h 2007-06-12 13:14:19.000000000 +0200
++++ head-2009-06-09/include/xen/driver_util.h 2007-06-12 13:14:19.000000000 +0200
@@ -0,0 +1,14 @@
+
+#ifndef __ASM_XEN_DRIVER_UTIL_H__
@@ -44066,7 +44070,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* __ASM_XEN_DRIVER_UTIL_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/evtchn.h 2009-04-07 13:58:49.000000000 +0200
++++ head-2009-06-09/include/xen/evtchn.h 2009-04-07 13:58:49.000000000 +0200
@@ -0,0 +1,146 @@
+/******************************************************************************
+ * evtchn.h
@@ -44215,7 +44219,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* __ASM_EVTCHN_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/firmware.h 2007-07-02 08:16:19.000000000 +0200
++++ head-2009-06-09/include/xen/firmware.h 2007-07-02 08:16:19.000000000 +0200
@@ -0,0 +1,10 @@
+#ifndef __XEN_FIRMWARE_H__
+#define __XEN_FIRMWARE_H__
@@ -44228,7 +44232,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* __XEN_FIRMWARE_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/gnttab.h 2008-11-04 11:13:10.000000000 +0100
++++ head-2009-06-09/include/xen/gnttab.h 2008-11-04 11:13:10.000000000 +0100
@@ -0,0 +1,164 @@
+/******************************************************************************
+ * gnttab.h
@@ -44395,7 +44399,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* __ASM_GNTTAB_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/hvm.h 2007-06-12 13:14:19.000000000 +0200
++++ head-2009-06-09/include/xen/hvm.h 2007-06-12 13:14:19.000000000 +0200
@@ -0,0 +1,23 @@
+/* Simple wrappers around HVM functions */
+#ifndef XEN_HVM_H__
@@ -44421,7 +44425,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* XEN_HVM_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/hypercall.h 2008-01-28 12:24:19.000000000 +0100
++++ head-2009-06-09/include/xen/hypercall.h 2008-01-28 12:24:19.000000000 +0100
@@ -0,0 +1,30 @@
+#ifndef __XEN_HYPERCALL_H__
+#define __XEN_HYPERCALL_H__
@@ -44454,7 +44458,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* __XEN_HYPERCALL_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/hypervisor_sysfs.h 2007-06-22 09:08:06.000000000 +0200
++++ head-2009-06-09/include/xen/hypervisor_sysfs.h 2007-06-22 09:08:06.000000000 +0200
@@ -0,0 +1,30 @@
+/*
+ * copyright (c) 2006 IBM Corporation
@@ -44487,7 +44491,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* _HYP_SYSFS_H_ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/pcifront.h 2007-06-18 08:38:13.000000000 +0200
++++ head-2009-06-09/include/xen/pcifront.h 2007-06-18 08:38:13.000000000 +0200
@@ -0,0 +1,83 @@
+/*
+ * PCI Frontend - arch-dependendent declarations
@@ -44573,7 +44577,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* __XEN_ASM_PCIFRONT_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/public/evtchn.h 2007-06-12 13:14:19.000000000 +0200
++++ head-2009-06-09/include/xen/public/evtchn.h 2007-06-12 13:14:19.000000000 +0200
@@ -0,0 +1,88 @@
+/******************************************************************************
+ * evtchn.h
@@ -44664,7 +44668,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* __LINUX_PUBLIC_EVTCHN_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/public/gntdev.h 2008-04-02 12:34:02.000000000 +0200
++++ head-2009-06-09/include/xen/public/gntdev.h 2008-04-02 12:34:02.000000000 +0200
@@ -0,0 +1,119 @@
+/******************************************************************************
+ * gntdev.h
@@ -44786,7 +44790,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* __LINUX_PUBLIC_GNTDEV_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/public/privcmd.h 2007-06-12 13:14:19.000000000 +0200
++++ head-2009-06-09/include/xen/public/privcmd.h 2007-06-12 13:14:19.000000000 +0200
@@ -0,0 +1,79 @@
+/******************************************************************************
+ * privcmd.h
@@ -44868,7 +44872,66 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* __LINUX_PUBLIC_PRIVCMD_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/xen_proc.h 2007-06-12 13:14:19.000000000 +0200
++++ head-2009-06-09/include/xen/public/xenbus.h 2009-05-29 10:25:53.000000000 +0200
+@@ -0,0 +1,56 @@
++/******************************************************************************
++ * xenbus.h
++ *
++ * Interface to /proc/xen/xenbus.
++ *
++ * Copyright (c) 2008, Diego Ongaro <diego.ongaro@citrix.com>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License version 2
++ * as published by the Free Software Foundation; or, when distributed
++ * separately from the Linux kernel or incorporated into other
++ * software packages, subject to the following license:
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a copy
++ * of this source file (the "Software"), to deal in the Software without
++ * restriction, including without limitation the rights to use, copy, modify,
++ * merge, publish, distribute, sublicense, and/or sell copies of the Software,
++ * and to permit persons to whom the Software is furnished to do so, subject to
++ * the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
++ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
++ * IN THE SOFTWARE.
++ */
++
++#ifndef __LINUX_PUBLIC_XENBUS_H__
++#define __LINUX_PUBLIC_XENBUS_H__
++
++#include <linux/types.h>
++
++#ifndef __user
++#define __user
++#endif
++
++typedef struct xenbus_alloc {
++ domid_t dom;
++ __u32 port;
++ __u32 grant_ref;
++} xenbus_alloc_t;
++
++/*
++ * @cmd: IOCTL_XENBUS_ALLOC
++ * @arg: &xenbus_alloc_t
++ * Return: 0, or -1 for error
++ */
++#define IOCTL_XENBUS_ALLOC \
++ _IOC(_IOC_NONE, 'X', 0, sizeof(xenbus_alloc_t))
++
++#endif /* __LINUX_PUBLIC_XENBUS_H__ */
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ head-2009-06-09/include/xen/xen_proc.h 2007-06-12 13:14:19.000000000 +0200
@@ -0,0 +1,12 @@
+
+#ifndef __ASM_XEN_PROC_H__
@@ -44883,7 +44946,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* __ASM_XEN_PROC_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/xencons.h 2007-10-15 09:39:38.000000000 +0200
++++ head-2009-06-09/include/xen/xencons.h 2007-10-15 09:39:38.000000000 +0200
@@ -0,0 +1,17 @@
+#ifndef __ASM_XENCONS_H__
+#define __ASM_XENCONS_H__
@@ -44903,7 +44966,7 @@ for reference, prefixed with the version the removal occured):
+
+#endif /* __ASM_XENCONS_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/include/xen/xenoprof.h 2007-06-12 13:14:19.000000000 +0200
++++ head-2009-06-09/include/xen/xenoprof.h 2007-06-12 13:14:19.000000000 +0200
@@ -0,0 +1,42 @@
+/******************************************************************************
+ * xen/xenoprof.h
@@ -44948,7 +45011,7 @@ for reference, prefixed with the version the removal occured):
+#endif /* CONFIG_XEN */
+#endif /* __XEN_XENOPROF_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/lib/swiotlb-xen.c 2009-04-07 13:58:49.000000000 +0200
++++ head-2009-06-09/lib/swiotlb-xen.c 2009-04-07 13:58:49.000000000 +0200
@@ -0,0 +1,739 @@
+/*
+ * Dynamic DMA mapping support.
@@ -45690,7 +45753,7 @@ for reference, prefixed with the version the removal occured):
+EXPORT_SYMBOL(swiotlb_dma_mapping_error);
+EXPORT_SYMBOL(swiotlb_dma_supported);
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/scripts/Makefile.xen.awk 2007-08-06 15:10:49.000000000 +0200
++++ head-2009-06-09/scripts/Makefile.xen.awk 2007-08-06 15:10:49.000000000 +0200
@@ -0,0 +1,34 @@
+BEGIN {
+ is_rule = 0
diff --git a/patches.xen/xen3-auto-xen-drivers.diff b/patches.xen/xen3-auto-xen-drivers.diff
index 5d58b5fb5d..b97a3e9313 100644
--- a/patches.xen/xen3-auto-xen-drivers.diff
+++ b/patches.xen/xen3-auto-xen-drivers.diff
@@ -1,16 +1,16 @@
Subject: xen3 xen-drivers
-From: http://xenbits.xensource.com/linux-2.6.18-xen.hg (tip 873:57acc535fd37)
+From: http://xenbits.xensource.com/linux-2.6.18-xen.hg (tip 898:ca12928cdafe)
Patch-mainline: obsolete
Acked-by: jbeulich@novell.com
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/balloon/Makefile 2007-06-12 13:13:44.000000000 +0200
++++ head-2009-06-09/drivers/xen/balloon/Makefile 2007-06-12 13:13:44.000000000 +0200
@@ -0,0 +1,2 @@
+
+obj-y := balloon.o sysfs.o
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/balloon/balloon.c 2009-03-18 10:39:31.000000000 +0100
-@@ -0,0 +1,724 @@
++++ head-2009-06-09/drivers/xen/balloon/balloon.c 2009-06-09 15:01:37.000000000 +0200
+@@ -0,0 +1,702 @@
+/******************************************************************************
+ * balloon.c
+ *
@@ -201,7 +201,7 @@ Acked-by: jbeulich@novell.com
+
+static unsigned long current_target(void)
+{
-+ unsigned long target = min(bs.target_pages, bs.hard_limit);
++ unsigned long target = bs.target_pages;
+ if (target > (bs.current_pages + bs.balloon_low + bs.balloon_high))
+ target = bs.current_pages + bs.balloon_low + bs.balloon_high;
+ return target;
@@ -268,26 +268,12 @@ Acked-by: jbeulich@novell.com
+ }
+
+ set_xen_guest_handle(reservation.extent_start, frame_list);
-+ reservation.nr_extents = nr_pages;
-+ rc = HYPERVISOR_memory_op(
-+ XENMEM_populate_physmap, &reservation);
-+ if (rc < nr_pages) {
-+ if (rc > 0) {
-+ int ret;
-+
-+ /* We hit the Xen hard limit: reprobe. */
-+ reservation.nr_extents = rc;
-+ ret = HYPERVISOR_memory_op(XENMEM_decrease_reservation,
-+ &reservation);
-+ BUG_ON(ret != rc);
-+ }
-+ if (rc >= 0)
-+ bs.hard_limit = (bs.current_pages + rc -
-+ bs.driver_pages);
++ reservation.nr_extents = nr_pages;
++ rc = HYPERVISOR_memory_op(XENMEM_populate_physmap, &reservation);
++ if (rc < 0)
+ goto out;
-+ }
+
-+ for (i = 0; i < nr_pages; i++) {
++ for (i = 0; i < rc; i++) {
+ page = balloon_retrieve();
+ BUG_ON(page == NULL);
+
@@ -315,13 +301,13 @@ Acked-by: jbeulich@novell.com
+ balloon_free_page(page);
+ }
+
-+ bs.current_pages += nr_pages;
++ bs.current_pages += rc;
+ totalram_pages = bs.current_pages;
+
+ out:
+ balloon_unlock(flags);
+
-+ return 0;
++ return rc < 0 ? rc : rc != nr_pages;
+}
+
+static int decrease_reservation(unsigned long nr_pages)
@@ -433,7 +419,6 @@ Acked-by: jbeulich@novell.com
+void balloon_set_new_target(unsigned long target)
+{
+ /* No need for lock. Not read-modify-write updates. */
-+ bs.hard_limit = ~0UL;
+ bs.target_pages = max(target, minimum_target());
+ schedule_work(&balloon_worker);
+}
@@ -511,17 +496,11 @@ Acked-by: jbeulich@novell.com
+ "Requested target: %8lu kB\n"
+ "Low-mem balloon: %8lu kB\n"
+ "High-mem balloon: %8lu kB\n"
-+ "Driver pages: %8lu kB\n"
-+ "Xen hard limit: ",
++ "Driver pages: %8lu kB\n",
+ PAGES2KB(bs.current_pages), PAGES2KB(bs.target_pages),
+ PAGES2KB(bs.balloon_low), PAGES2KB(bs.balloon_high),
+ PAGES2KB(bs.driver_pages));
+
-+ if (bs.hard_limit != ~0UL)
-+ len += sprintf(page + len, "%8lu kB\n",
-+ PAGES2KB(bs.hard_limit));
-+ else
-+ len += sprintf(page + len, " ??? kB\n");
+
+ *eof = 1;
+ return len;
@@ -552,7 +531,6 @@ Acked-by: jbeulich@novell.com
+ bs.balloon_low = 0;
+ bs.balloon_high = 0;
+ bs.driver_pages = 0UL;
-+ bs.hard_limit = ~0UL;
+
+ init_timer(&balloon_timer);
+ balloon_timer.data = 0;
@@ -736,8 +714,8 @@ Acked-by: jbeulich@novell.com
+
+MODULE_LICENSE("Dual BSD/GPL");
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/balloon/common.h 2007-06-12 13:13:44.000000000 +0200
-@@ -0,0 +1,58 @@
++++ head-2009-06-09/drivers/xen/balloon/common.h 2009-06-09 15:01:37.000000000 +0200
+@@ -0,0 +1,56 @@
+/******************************************************************************
+ * balloon/common.h
+ *
@@ -775,8 +753,6 @@ Acked-by: jbeulich@novell.com
+ /* We aim for 'current allocation' == 'target allocation'. */
+ unsigned long current_pages;
+ unsigned long target_pages;
-+ /* We may hit the hard limit in Xen. If we do then we remember it. */
-+ unsigned long hard_limit;
+ /*
+ * Drivers may alter the memory reservation independently, but they
+ * must inform the balloon driver so we avoid hitting the hard limit.
@@ -797,8 +773,8 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __XEN_BALLOON_COMMON_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/balloon/sysfs.c 2009-03-18 10:39:31.000000000 +0100
-@@ -0,0 +1,171 @@
++++ head-2009-06-09/drivers/xen/balloon/sysfs.c 2009-06-09 15:01:37.000000000 +0200
+@@ -0,0 +1,167 @@
+/******************************************************************************
+ * balloon/sysfs.c
+ *
@@ -854,9 +830,6 @@ Acked-by: jbeulich@novell.com
+BALLOON_SHOW(current_kb, "%lu\n", PAGES2KB(bs.current_pages));
+BALLOON_SHOW(low_kb, "%lu\n", PAGES2KB(bs.balloon_low));
+BALLOON_SHOW(high_kb, "%lu\n", PAGES2KB(bs.balloon_high));
-+BALLOON_SHOW(hard_limit_kb,
-+ (bs.hard_limit!=~0UL) ? "%lu\n" : "???\n",
-+ (bs.hard_limit!=~0UL) ? PAGES2KB(bs.hard_limit) : 0);
+BALLOON_SHOW(driver_kb, "%lu\n", PAGES2KB(bs.driver_pages));
+
+static ssize_t show_target_kb(struct sys_device *dev, char *buf)
@@ -897,7 +870,6 @@ Acked-by: jbeulich@novell.com
+ &attr_current_kb.attr,
+ &attr_low_kb.attr,
+ &attr_high_kb.attr,
-+ &attr_hard_limit_kb.attr,
+ &attr_driver_kb.attr,
+ NULL
+};
@@ -971,14 +943,15 @@ Acked-by: jbeulich@novell.com
+ unregister_balloon(&balloon_sysdev);
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/blkback/Makefile 2007-06-12 13:13:44.000000000 +0200
-@@ -0,0 +1,3 @@
++++ head-2009-06-09/drivers/xen/blkback/Makefile 2009-06-09 15:01:37.000000000 +0200
+@@ -0,0 +1,4 @@
+obj-$(CONFIG_XEN_BLKDEV_BACKEND) := blkbk.o
++obj-$(CONFIG_XEN_BLKBACK_PAGEMAP) += blkback-pagemap.o
+
+blkbk-y := blkback.o xenbus.o interface.o vbd.o
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/blkback/blkback.c 2009-03-18 10:39:31.000000000 +0100
-@@ -0,0 +1,656 @@
++++ head-2009-06-09/drivers/xen/blkback/blkback.c 2009-05-29 10:25:53.000000000 +0200
+@@ -0,0 +1,664 @@
+/******************************************************************************
+ * arch/xen/drivers/blkif/backend/main.c
+ *
@@ -1154,6 +1127,7 @@ Acked-by: jbeulich@novell.com
+ handle = pending_handle(req, i);
+ if (handle == BLKBACK_INVALID_HANDLE)
+ continue;
++ blkback_pagemap_clear(virt_to_page(vaddr(req, i)));
+ gnttab_set_unmap_op(&unmap[invcount], vaddr(req, i),
+ GNTMAP_host_map, handle);
+ pending_handle(req, i) = BLKBACK_INVALID_HANDLE;
@@ -1445,6 +1419,10 @@ Acked-by: jbeulich@novell.com
+ FOREIGN_FRAME(map[i].dev_bus_addr >> PAGE_SHIFT));
+ seg[i].buf = map[i].dev_bus_addr |
+ (req->seg[i].first_sect << 9);
++ blkback_pagemap_set(vaddr_pagenr(pending_req, i),
++ virt_to_page(vaddr(pending_req, i)),
++ blkif->domid, req->handle,
++ req->seg[i].gref);
+ }
+
+ if (ret)
@@ -1606,6 +1584,9 @@ Acked-by: jbeulich@novell.com
+ mmap_pages, GFP_KERNEL);
+ pending_pages = alloc_empty_pages_and_pagevec(mmap_pages);
+
++ if (blkback_pagemap_init(mmap_pages))
++ goto out_of_memory;
++
+ if (!pending_reqs || !pending_grant_handles || !pending_pages)
+ goto out_of_memory;
+
@@ -1636,8 +1617,147 @@ Acked-by: jbeulich@novell.com
+
+MODULE_LICENSE("Dual BSD/GPL");
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/blkback/common.h 2008-05-08 14:02:04.000000000 +0200
-@@ -0,0 +1,139 @@
++++ head-2009-06-09/drivers/xen/blkback/blkback-pagemap.c 2009-06-09 15:01:37.000000000 +0200
+@@ -0,0 +1,96 @@
++#include <linux/module.h>
++#include "blkback-pagemap.h"
++
++static int blkback_pagemap_size;
++static struct blkback_pagemap *blkback_pagemap;
++
++static inline int
++blkback_pagemap_entry_clear(struct blkback_pagemap *map)
++{
++ static struct blkback_pagemap zero;
++ return !memcmp(map, &zero, sizeof(zero));
++}
++
++int
++blkback_pagemap_init(int pages)
++{
++ blkback_pagemap = kzalloc(pages * sizeof(struct blkback_pagemap),
++ GFP_KERNEL);
++ if (!blkback_pagemap)
++ return -ENOMEM;
++
++ blkback_pagemap_size = pages;
++ return 0;
++}
++EXPORT_SYMBOL_GPL(blkback_pagemap_init);
++
++void
++blkback_pagemap_set(int idx, struct page *page,
++ domid_t domid, busid_t busid, grant_ref_t gref)
++{
++ struct blkback_pagemap *entry;
++
++ BUG_ON(!blkback_pagemap);
++ BUG_ON(idx >= blkback_pagemap_size);
++
++ SetPageBlkback(page);
++ set_page_private(page, idx);
++
++ entry = blkback_pagemap + idx;
++ if (!blkback_pagemap_entry_clear(entry)) {
++ printk("overwriting pagemap %d: d %u b %u g %u\n",
++ idx, entry->domid, entry->busid, entry->gref);
++ BUG();
++ }
++
++ entry->domid = domid;
++ entry->busid = busid;
++ entry->gref = gref;
++}
++EXPORT_SYMBOL_GPL(blkback_pagemap_set);
++
++void
++blkback_pagemap_clear(struct page *page)
++{
++ int idx;
++ struct blkback_pagemap *entry;
++
++ idx = (int)page_private(page);
++
++ BUG_ON(!blkback_pagemap);
++ BUG_ON(!PageBlkback(page));
++ BUG_ON(idx >= blkback_pagemap_size);
++
++ entry = blkback_pagemap + idx;
++ if (blkback_pagemap_entry_clear(entry)) {
++ printk("clearing empty pagemap %d\n", idx);
++ BUG();
++ }
++
++ memset(entry, 0, sizeof(*entry));
++}
++EXPORT_SYMBOL_GPL(blkback_pagemap_clear);
++
++struct blkback_pagemap
++blkback_pagemap_read(struct page *page)
++{
++ int idx;
++ struct blkback_pagemap *entry;
++
++ idx = (int)page_private(page);
++
++ BUG_ON(!blkback_pagemap);
++ BUG_ON(!PageBlkback(page));
++ BUG_ON(idx >= blkback_pagemap_size);
++
++ entry = blkback_pagemap + idx;
++ if (blkback_pagemap_entry_clear(entry)) {
++ printk("reading empty pagemap %d\n", idx);
++ BUG();
++ }
++
++ return *entry;
++}
++EXPORT_SYMBOL(blkback_pagemap_read);
++
++MODULE_LICENSE("Dual BSD/GPL");
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ head-2009-06-09/drivers/xen/blkback/blkback-pagemap.h 2009-06-09 15:01:37.000000000 +0200
+@@ -0,0 +1,37 @@
++#ifndef _BLKBACK_PAGEMAP_H_
++#define _BLKBACK_PAGEMAP_H_
++
++#include <linux/mm.h>
++#include <xen/interface/xen.h>
++#include <xen/interface/grant_table.h>
++
++typedef unsigned int busid_t;
++
++struct blkback_pagemap {
++ domid_t domid;
++ busid_t busid;
++ grant_ref_t gref;
++};
++
++#if defined(CONFIG_XEN_BLKBACK_PAGEMAP) || defined(CONFIG_XEN_BLKBACK_PAGEMAP_MODULE)
++
++int blkback_pagemap_init(int);
++void blkback_pagemap_set(int, struct page *, domid_t, busid_t, grant_ref_t);
++void blkback_pagemap_clear(struct page *);
++struct blkback_pagemap blkback_pagemap_read(struct page *);
++
++#else /* CONFIG_XEN_BLKBACK_PAGEMAP */
++
++static inline int blkback_pagemap_init(int pages) { return 0; }
++static inline void blkback_pagemap_set(int idx, struct page *page, domid_t dom,
++ busid_t bus, grant_ref_t gnt) {}
++static inline void blkback_pagemap_clear(struct page *page) {}
++static inline struct blkback_pagemap blkback_pagemap_read(struct page *page)
++{
++ BUG();
++ return (struct blkback_pagemap){-1, -1, -1};
++}
++
++#endif /* CONFIG_XEN_BLKBACK_PAGEMAP */
++
++#endif
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ head-2009-06-09/drivers/xen/blkback/common.h 2009-06-09 15:01:37.000000000 +0200
+@@ -0,0 +1,141 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License version 2
@@ -1683,6 +1803,8 @@ Acked-by: jbeulich@novell.com
+#include <xen/gnttab.h>
+#include <xen/driver_util.h>
+#include <xen/xenbus.h>
++#include "blkback-pagemap.h"
++
+
+#define DPRINTK(_f, _a...) \
+ pr_debug("(file=%s, line=%d) " _f, \
@@ -1778,7 +1900,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __BLKIF__BACKEND__COMMON_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/blkback/interface.c 2007-06-12 13:13:44.000000000 +0200
++++ head-2009-06-09/drivers/xen/blkback/interface.c 2007-06-12 13:13:44.000000000 +0200
@@ -0,0 +1,181 @@
+/******************************************************************************
+ * arch/xen/drivers/blkif/backend/interface.c
@@ -1962,7 +2084,7 @@ Acked-by: jbeulich@novell.com
+ 0, 0, NULL, NULL);
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/blkback/vbd.c 2009-05-19 09:16:41.000000000 +0200
++++ head-2009-06-09/drivers/xen/blkback/vbd.c 2009-05-19 09:16:41.000000000 +0200
@@ -0,0 +1,118 @@
+/******************************************************************************
+ * blkback/vbd.c
@@ -2083,7 +2205,7 @@ Acked-by: jbeulich@novell.com
+ return rc;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/blkback/xenbus.c 2008-05-08 14:02:04.000000000 +0200
++++ head-2009-06-09/drivers/xen/blkback/xenbus.c 2008-05-08 14:02:04.000000000 +0200
@@ -0,0 +1,541 @@
+/* Xenbus code for blkif backend
+ Copyright (C) 2005 Rusty Russell <rusty@rustcorp.com.au>
@@ -2627,7 +2749,7 @@ Acked-by: jbeulich@novell.com
+ xenbus_register_backend(&blkback);
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/blkfront/Makefile 2007-06-12 13:13:44.000000000 +0200
++++ head-2009-06-09/drivers/xen/blkfront/Makefile 2007-06-12 13:13:44.000000000 +0200
@@ -0,0 +1,5 @@
+
+obj-$(CONFIG_XEN_BLKDEV_FRONTEND) := xenblk.o
@@ -2635,7 +2757,7 @@ Acked-by: jbeulich@novell.com
+xenblk-objs := blkfront.o vbd.o
+
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/blkfront/blkfront.c 2009-03-18 10:39:31.000000000 +0100
++++ head-2009-06-09/drivers/xen/blkfront/blkfront.c 2009-03-18 10:39:31.000000000 +0100
@@ -0,0 +1,931 @@
+/******************************************************************************
+ * blkfront.c
@@ -3569,7 +3691,7 @@ Acked-by: jbeulich@novell.com
+
+MODULE_LICENSE("Dual BSD/GPL");
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/blkfront/block.h 2009-03-18 10:39:31.000000000 +0100
++++ head-2009-06-09/drivers/xen/blkfront/block.h 2009-03-18 10:39:31.000000000 +0100
@@ -0,0 +1,159 @@
+/******************************************************************************
+ * block.h
@@ -3731,7 +3853,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __XEN_DRIVERS_BLOCK_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/blkfront/vbd.c 2008-08-07 12:44:36.000000000 +0200
++++ head-2009-06-09/drivers/xen/blkfront/vbd.c 2008-08-07 12:44:36.000000000 +0200
@@ -0,0 +1,460 @@
+/******************************************************************************
+ * vbd.c
@@ -4194,7 +4316,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* CONFIG_SYSFS */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/blktap/Makefile 2007-06-12 13:13:44.000000000 +0200
++++ head-2009-06-09/drivers/xen/blktap/Makefile 2007-06-12 13:13:44.000000000 +0200
@@ -0,0 +1,5 @@
+LINUXINCLUDE += -I../xen/include/public/io
+
@@ -4202,7 +4324,7 @@ Acked-by: jbeulich@novell.com
+
+xenblktap-y := xenbus.o interface.o blktap.o
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/blktap/blktap.c 2009-05-19 09:16:41.000000000 +0200
++++ head-2009-06-09/drivers/xen/blktap/blktap.c 2009-05-29 10:25:53.000000000 +0200
@@ -0,0 +1,1756 @@
+/******************************************************************************
+ * drivers/xen/blktap/blktap.c
@@ -4322,7 +4444,7 @@ Acked-by: jbeulich@novell.com
+ [req id, idx] tuple */
+ blkif_t *blkif; /*Associate blkif with tapdev */
+ struct domid_translate_ext trans; /*Translation from domid to bus. */
-+ struct page **map; /*Mapping page */
++ struct vm_foreign_map foreign_map; /*Mapping page */
+} tap_blkif_t;
+
+static struct tap_blkif *tapfds[MAX_TAP_DEV];
@@ -4553,7 +4675,7 @@ Acked-by: jbeulich@novell.com
+ kvaddr = idx_to_kaddr(mmap_idx, pending_idx, seg);
+ pg = pfn_to_page(__pa(kvaddr) >> PAGE_SHIFT);
+ ClearPageReserved(pg);
-+ info->map[offset + RING_PAGES] = NULL;
++ info->foreign_map.map[offset + RING_PAGES] = NULL;
+
+ khandle = &pending_handle(mmap_idx, pending_idx, seg);
+
@@ -4602,7 +4724,7 @@ Acked-by: jbeulich@novell.com
+
+ info = vma->vm_file->private_data;
+ vma->vm_private_data =
-+ &info->map[(vma->vm_start - info->rings_vstart) >> PAGE_SHIFT];
++ &info->foreign_map.map[(vma->vm_start - info->rings_vstart) >> PAGE_SHIFT];
+}
+
+/* tricky part
@@ -4624,7 +4746,7 @@ Acked-by: jbeulich@novell.com
+
+ info = vma->vm_file->private_data;
+ next->vm_private_data =
-+ &info->map[(next->vm_start - info->rings_vstart) >> PAGE_SHIFT];
++ &info->foreign_map.map[(next->vm_start - info->rings_vstart) >> PAGE_SHIFT];
+}
+
+static struct vm_operations_struct blktap_vm_ops = {
@@ -4848,8 +4970,8 @@ Acked-by: jbeulich@novell.com
+
+ mmput(info->mm);
+ info->mm = NULL;
-+ kfree(info->map);
-+ info->map = NULL;
++ kfree(info->foreign_map.map);
++ info->foreign_map.map = NULL;
+
+ /* Free the ring page. */
+ ClearPageReserved(virt_to_page(info->ufe_ring.sring));
@@ -4932,14 +5054,14 @@ Acked-by: jbeulich@novell.com
+ }
+
+ /* Mark this VM as containing foreign pages, and set up mappings. */
-+ info->map = kzalloc(((vma->vm_end - vma->vm_start) >> PAGE_SHIFT) *
-+ sizeof(*info->map), GFP_KERNEL);
-+ if (info->map == NULL) {
++ info->foreign_map.map = kzalloc(((vma->vm_end - vma->vm_start) >> PAGE_SHIFT) *
++ sizeof(*info->foreign_map.map), GFP_KERNEL);
++ if (info->foreign_map.map == NULL) {
+ WPRINTK("Couldn't alloc VM_FOREIGN map.\n");
+ goto fail;
+ }
+
-+ vma->vm_private_data = info->map;
++ vma->vm_private_data = info->foreign_map.map;
+ vma->vm_flags |= VM_FOREIGN;
+ vma->vm_flags |= VM_DONTCOPY;
+
@@ -5444,7 +5566,7 @@ Acked-by: jbeulich@novell.com
+ pg = pfn_to_page(__pa(kvaddr) >> PAGE_SHIFT);
+ ClearPageReserved(pg);
+ offset = (uvaddr - info->rings_vstart) >> PAGE_SHIFT;
-+ info->map[offset] = NULL;
++ info->foreign_map.map[offset] = NULL;
+ }
+ fast_flush_area(pending_req, pending_idx, usr_idx, info->minor);
+ info->idx_map[usr_idx] = INVALID_REQ;
@@ -5736,7 +5858,7 @@ Acked-by: jbeulich@novell.com
+ >> PAGE_SHIFT));
+ offset = (uvaddr - info->rings_vstart) >> PAGE_SHIFT;
+ pg = pfn_to_page(__pa(kvaddr) >> PAGE_SHIFT);
-+ info->map[offset] = pg;
++ info->foreign_map.map[offset] = pg;
+ }
+ } else {
+ for (i = 0; i < nseg; i++) {
@@ -5763,7 +5885,7 @@ Acked-by: jbeulich@novell.com
+
+ offset = (uvaddr - info->rings_vstart) >> PAGE_SHIFT;
+ pg = pfn_to_page(__pa(kvaddr) >> PAGE_SHIFT);
-+ info->map[offset] = pg;
++ info->foreign_map.map[offset] = pg;
+ }
+ }
+
@@ -5961,7 +6083,7 @@ Acked-by: jbeulich@novell.com
+
+MODULE_LICENSE("Dual BSD/GPL");
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/blktap/common.h 2008-09-15 13:40:15.000000000 +0200
++++ head-2009-06-09/drivers/xen/blktap/common.h 2008-09-15 13:40:15.000000000 +0200
@@ -0,0 +1,122 @@
+/*
+ * This program is free software; you can redistribute it and/or
@@ -6086,7 +6208,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __BLKIF__BACKEND__COMMON_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/blktap/interface.c 2008-09-15 13:40:15.000000000 +0200
++++ head-2009-06-09/drivers/xen/blktap/interface.c 2008-09-15 13:40:15.000000000 +0200
@@ -0,0 +1,181 @@
+/******************************************************************************
+ * drivers/xen/blktap/interface.c
@@ -6270,7 +6392,7 @@ Acked-by: jbeulich@novell.com
+ 0, 0, NULL, NULL);
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/blktap/xenbus.c 2008-09-15 13:40:15.000000000 +0200
++++ head-2009-06-09/drivers/xen/blktap/xenbus.c 2008-09-15 13:40:15.000000000 +0200
@@ -0,0 +1,479 @@
+/* drivers/xen/blktap/xenbus.c
+ *
@@ -6752,11 +6874,3068 @@ Acked-by: jbeulich@novell.com
+ xenbus_register_backend(&blktap);
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/char/Makefile 2007-07-10 09:42:30.000000000 +0200
++++ head-2009-06-09/drivers/xen/blktap2/Makefile 2009-05-29 10:25:53.000000000 +0200
+@@ -0,0 +1,3 @@
++obj-$(CONFIG_XEN_BLKDEV_TAP2) := blktap.o
++
++blktap-objs := control.o ring.o wait_queue.o device.o request.o sysfs.o
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ head-2009-06-09/drivers/xen/blktap2/blktap.h 2009-06-09 15:01:37.000000000 +0200
+@@ -0,0 +1,246 @@
++#ifndef _BLKTAP_H_
++#define _BLKTAP_H_
++
++#include <linux/fs.h>
++#include <linux/poll.h>
++#include <linux/cdev.h>
++#include <linux/scatterlist.h>
++#include <xen/blkif.h>
++#include <xen/gnttab.h>
++
++//#define ENABLE_PASSTHROUGH
++
++extern int blktap_debug_level;
++
++#define BTPRINTK(level, tag, force, _f, _a...) \
++ do { \
++ if (blktap_debug_level > level && \
++ (force || printk_ratelimit())) \
++ printk(tag "%s: " _f, __func__, ##_a); \
++ } while (0)
++
++#define BTDBG(_f, _a...) BTPRINTK(8, KERN_DEBUG, 1, _f, ##_a)
++#define BTINFO(_f, _a...) BTPRINTK(0, KERN_INFO, 0, _f, ##_a)
++#define BTWARN(_f, _a...) BTPRINTK(0, KERN_WARNING, 0, _f, ##_a)
++#define BTERR(_f, _a...) BTPRINTK(0, KERN_ERR, 0, _f, ##_a)
++
++#define MAX_BLKTAP_DEVICE 256
++
++#define BLKTAP_CONTROL 1
++#define BLKTAP_RING_FD 2
++#define BLKTAP_RING_VMA 3
++#define BLKTAP_DEVICE 4
++#define BLKTAP_SYSFS 5
++#define BLKTAP_PAUSE_REQUESTED 6
++#define BLKTAP_PAUSED 7
++#define BLKTAP_SHUTDOWN_REQUESTED 8
++#define BLKTAP_PASSTHROUGH 9
++#define BLKTAP_DEFERRED 10
++
++/* blktap IOCTLs: */
++#define BLKTAP2_IOCTL_KICK_FE 1
++#define BLKTAP2_IOCTL_ALLOC_TAP 200
++#define BLKTAP2_IOCTL_FREE_TAP 201
++#define BLKTAP2_IOCTL_CREATE_DEVICE 202
++#define BLKTAP2_IOCTL_SET_PARAMS 203
++#define BLKTAP2_IOCTL_PAUSE 204
++#define BLKTAP2_IOCTL_REOPEN 205
++#define BLKTAP2_IOCTL_RESUME 206
++
++#define BLKTAP2_MAX_MESSAGE_LEN 256
++
++#define BLKTAP2_RING_MESSAGE_PAUSE 1
++#define BLKTAP2_RING_MESSAGE_RESUME 2
++#define BLKTAP2_RING_MESSAGE_CLOSE 3
++
++#define BLKTAP_REQUEST_FREE 0
++#define BLKTAP_REQUEST_PENDING 1
++
++/*
++ * The maximum number of requests that can be outstanding at any time
++ * is determined by
++ *
++ * [mmap_alloc * MAX_PENDING_REQS * BLKIF_MAX_SEGMENTS_PER_REQUEST]
++ *
++ * where mmap_alloc < MAX_DYNAMIC_MEM.
++ *
++ * TODO:
++ * mmap_alloc is initialised to 2 and should be adjustable on the fly via
++ * sysfs.
++ */
++#define BLK_RING_SIZE __RING_SIZE((blkif_sring_t *)0, PAGE_SIZE)
++#define MAX_DYNAMIC_MEM BLK_RING_SIZE
++#define MAX_PENDING_REQS BLK_RING_SIZE
++#define MMAP_PAGES (MAX_PENDING_REQS * BLKIF_MAX_SEGMENTS_PER_REQUEST)
++#define MMAP_VADDR(_start, _req, _seg) \
++ (_start + \
++ ((_req) * BLKIF_MAX_SEGMENTS_PER_REQUEST * PAGE_SIZE) + \
++ ((_seg) * PAGE_SIZE))
++
++#define blktap_get(_b) (atomic_inc(&(_b)->refcnt))
++#define blktap_put(_b) \
++ do { \
++ if (atomic_dec_and_test(&(_b)->refcnt)) \
++ wake_up(&(_b)->wq); \
++ } while (0)
++
++struct blktap;
++
++struct grant_handle_pair {
++ grant_handle_t kernel;
++ grant_handle_t user;
++};
++#define INVALID_GRANT_HANDLE 0xFFFF
++
++struct blktap_handle {
++ unsigned int ring;
++ unsigned int device;
++ unsigned int minor;
++};
++
++struct blktap_params {
++ char name[BLKTAP2_MAX_MESSAGE_LEN];
++ unsigned long long capacity;
++ unsigned long sector_size;
++};
++
++struct blktap_device {
++ int users;
++ spinlock_t lock;
++ struct gendisk *gd;
++
++#ifdef ENABLE_PASSTHROUGH
++ struct block_device *bdev;
++#endif
++};
++
++struct blktap_ring {
++ struct vm_area_struct *vma;
++ blkif_front_ring_t ring;
++ struct vm_foreign_map foreign_map;
++ unsigned long ring_vstart;
++ unsigned long user_vstart;
++
++ int response;
++
++ wait_queue_head_t poll_wait;
++
++ dev_t devno;
++ struct class_device *dev;
++ atomic_t sysfs_refcnt;
++ struct mutex sysfs_mutex;
++};
++
++struct blktap_statistics {
++ unsigned long st_print;
++ int st_rd_req;
++ int st_wr_req;
++ int st_oo_req;
++ int st_rd_sect;
++ int st_wr_sect;
++ s64 st_rd_cnt;
++ s64 st_rd_sum_usecs;
++ s64 st_rd_max_usecs;
++ s64 st_wr_cnt;
++ s64 st_wr_sum_usecs;
++ s64 st_wr_max_usecs;
++};
++
++struct blktap_request {
++ uint64_t id;
++ uint16_t usr_idx;
++
++ uint8_t status;
++ atomic_t pendcnt;
++ uint8_t nr_pages;
++ unsigned short operation;
++
++ struct timeval time;
++ struct grant_handle_pair handles[BLKIF_MAX_SEGMENTS_PER_REQUEST];
++ struct list_head free_list;
++};
++
++struct blktap {
++ int minor;
++ pid_t pid;
++ atomic_t refcnt;
++ unsigned long dev_inuse;
++
++ struct blktap_params params;
++
++ struct rw_semaphore tap_sem;
++
++ struct blktap_ring ring;
++ struct blktap_device device;
++
++ int pending_cnt;
++ struct blktap_request *pending_requests[MAX_PENDING_REQS];
++ struct scatterlist sg[BLKIF_MAX_SEGMENTS_PER_REQUEST];
++
++ wait_queue_head_t wq;
++ struct list_head deferred_queue;
++
++ struct blktap_statistics stats;
++};
++
++extern struct blktap *blktaps[MAX_BLKTAP_DEVICE];
++
++static inline int
++blktap_active(struct blktap *tap)
++{
++ return test_bit(BLKTAP_RING_VMA, &tap->dev_inuse);
++}
++
++static inline int
++blktap_validate_params(struct blktap *tap, struct blktap_params *params)
++{
++ /* TODO: sanity check */
++ params->name[sizeof(params->name) - 1] = '\0';
++ BTINFO("%s: capacity: %llu, sector-size: %lu\n",
++ params->name, params->capacity, params->sector_size);
++ return 0;
++}
++
++int blktap_control_destroy_device(struct blktap *);
++
++int blktap_ring_init(int *);
++int blktap_ring_free(void);
++int blktap_ring_create(struct blktap *);
++int blktap_ring_destroy(struct blktap *);
++int blktap_ring_pause(struct blktap *);
++int blktap_ring_resume(struct blktap *);
++void blktap_ring_kick_user(struct blktap *);
++
++int blktap_sysfs_init(void);
++void blktap_sysfs_free(void);
++int blktap_sysfs_create(struct blktap *);
++int blktap_sysfs_destroy(struct blktap *);
++
++int blktap_device_init(int *);
++void blktap_device_free(void);
++int blktap_device_create(struct blktap *);
++int blktap_device_destroy(struct blktap *);
++int blktap_device_pause(struct blktap *);
++int blktap_device_resume(struct blktap *);
++void blktap_device_restart(struct blktap *);
++void blktap_device_finish_request(struct blktap *,
++ blkif_response_t *,
++ struct blktap_request *);
++void blktap_device_fail_pending_requests(struct blktap *);
++#ifdef ENABLE_PASSTHROUGH
++int blktap_device_enable_passthrough(struct blktap *,
++ unsigned, unsigned);
++#endif
++
++void blktap_defer(struct blktap *);
++void blktap_run_deferred(void);
++
++int blktap_request_pool_init(void);
++void blktap_request_pool_free(void);
++int blktap_request_pool_grow(void);
++int blktap_request_pool_shrink(void);
++struct blktap_request *blktap_request_allocate(struct blktap *);
++void blktap_request_free(struct blktap *, struct blktap_request *);
++unsigned long request_to_kaddr(struct blktap_request *, int);
++
++#endif
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ head-2009-06-09/drivers/xen/blktap2/control.c 2009-05-29 10:25:53.000000000 +0200
+@@ -0,0 +1,277 @@
++#include <linux/module.h>
++#include <linux/miscdevice.h>
++
++#include "blktap.h"
++
++static DEFINE_SPINLOCK(blktap_control_lock);
++struct blktap *blktaps[MAX_BLKTAP_DEVICE];
++
++static int ring_major;
++static int device_major;
++static int blktap_control_registered;
++
++static void
++blktap_control_initialize_tap(struct blktap *tap)
++{
++ int minor = tap->minor;
++
++ memset(tap, 0, sizeof(*tap));
++ set_bit(BLKTAP_CONTROL, &tap->dev_inuse);
++ init_rwsem(&tap->tap_sem);
++ init_waitqueue_head(&tap->wq);
++ atomic_set(&tap->refcnt, 0);
++
++ tap->minor = minor;
++}
++
++static struct blktap *
++blktap_control_create_tap(void)
++{
++ int minor;
++ struct blktap *tap;
++
++ tap = kmalloc(sizeof(*tap), GFP_KERNEL);
++ if (unlikely(!tap))
++ return NULL;
++
++ blktap_control_initialize_tap(tap);
++
++ spin_lock_irq(&blktap_control_lock);
++ for (minor = 0; minor < MAX_BLKTAP_DEVICE; minor++)
++ if (!blktaps[minor])
++ break;
++
++ if (minor == MAX_BLKTAP_DEVICE) {
++ kfree(tap);
++ tap = NULL;
++ goto out;
++ }
++
++ tap->minor = minor;
++ blktaps[minor] = tap;
++
++out:
++ spin_unlock_irq(&blktap_control_lock);
++ return tap;
++}
++
++static struct blktap *
++blktap_control_allocate_tap(void)
++{
++ int err, minor;
++ struct blktap *tap;
++
++ /*
++ * This is called only from the ioctl, which
++ * means we should always have interrupts enabled.
++ */
++ BUG_ON(irqs_disabled());
++
++ spin_lock_irq(&blktap_control_lock);
++
++ for (minor = 0; minor < MAX_BLKTAP_DEVICE; minor++) {
++ tap = blktaps[minor];
++ if (!tap)
++ goto found;
++
++ if (!tap->dev_inuse) {
++ blktap_control_initialize_tap(tap);
++ goto found;
++ }
++ }
++
++ tap = NULL;
++
++found:
++ spin_unlock_irq(&blktap_control_lock);
++
++ if (!tap) {
++ tap = blktap_control_create_tap();
++ if (!tap)
++ return NULL;
++ }
++
++ err = blktap_ring_create(tap);
++ if (err) {
++ BTERR("ring creation failed: %d\n", err);
++ clear_bit(BLKTAP_CONTROL, &tap->dev_inuse);
++ return NULL;
++ }
++
++ BTINFO("allocated tap %p\n", tap);
++ return tap;
++}
++
++static int
++blktap_control_ioctl(struct inode *inode, struct file *filp,
++ unsigned int cmd, unsigned long arg)
++{
++ unsigned long dev;
++ struct blktap *tap;
++
++ switch (cmd) {
++ case BLKTAP2_IOCTL_ALLOC_TAP: {
++ struct blktap_handle h;
++
++ tap = blktap_control_allocate_tap();
++ if (!tap) {
++ BTERR("error allocating device\n");
++ return -ENOMEM;
++ }
++
++ h.ring = ring_major;
++ h.device = device_major;
++ h.minor = tap->minor;
++
++ if (copy_to_user((struct blktap_handle __user *)arg,
++ &h, sizeof(h))) {
++ blktap_control_destroy_device(tap);
++ return -EFAULT;
++ }
++
++ return 0;
++ }
++
++ case BLKTAP2_IOCTL_FREE_TAP:
++ dev = arg;
++
++ if (dev > MAX_BLKTAP_DEVICE || !blktaps[dev])
++ return -EINVAL;
++
++ blktap_control_destroy_device(blktaps[dev]);
++ return 0;
++ }
++
++ return -ENOIOCTLCMD;
++}
++
++static struct file_operations blktap_control_file_operations = {
++ .owner = THIS_MODULE,
++ .ioctl = blktap_control_ioctl,
++};
++
++static struct miscdevice blktap_misc = {
++ .minor = MISC_DYNAMIC_MINOR,
++ .name = "blktap-control",
++ .fops = &blktap_control_file_operations,
++};
++
++int
++blktap_control_destroy_device(struct blktap *tap)
++{
++ int err;
++ unsigned long inuse;
++
++ if (!tap)
++ return 0;
++
++ set_bit(BLKTAP_SHUTDOWN_REQUESTED, &tap->dev_inuse);
++
++ for (;;) {
++ inuse = tap->dev_inuse;
++ err = blktap_device_destroy(tap);
++ if (err)
++ goto wait;
++
++ inuse = tap->dev_inuse;
++ err = blktap_ring_destroy(tap);
++ if (err)
++ goto wait;
++
++ inuse = tap->dev_inuse;
++ err = blktap_sysfs_destroy(tap);
++ if (err)
++ goto wait;
++
++ break;
++
++ wait:
++ BTDBG("inuse: 0x%lx, dev_inuse: 0x%lx\n",
++ inuse, tap->dev_inuse);
++ if (wait_event_interruptible(tap->wq, tap->dev_inuse != inuse))
++ break;
++ }
++
++ clear_bit(BLKTAP_SHUTDOWN_REQUESTED, &tap->dev_inuse);
++
++ if (tap->dev_inuse == (1UL << BLKTAP_CONTROL)) {
++ err = 0;
++ clear_bit(BLKTAP_CONTROL, &tap->dev_inuse);
++ }
++
++ return err;
++}
++
++static int
++blktap_control_init(void)
++{
++ int err;
++
++ err = misc_register(&blktap_misc);
++ if (err) {
++ BTERR("misc_register failed for control device");
++ return err;
++ }
++
++ blktap_control_registered = 1;
++ return 0;
++}
++
++static void
++blktap_control_free(void)
++{
++ int i;
++
++ for (i = 0; i < MAX_BLKTAP_DEVICE; i++)
++ blktap_control_destroy_device(blktaps[i]);
++
++ if (blktap_control_registered)
++ if (misc_deregister(&blktap_misc) < 0)
++ BTERR("misc_deregister failed for control device");
++}
++
++static void
++blktap_exit(void)
++{
++ blktap_control_free();
++ blktap_ring_free();
++ blktap_sysfs_free();
++ blktap_device_free();
++ blktap_request_pool_free();
++}
++
++static int __init
++blktap_init(void)
++{
++ int err;
++
++ err = blktap_request_pool_init();
++ if (err)
++ return err;
++
++ err = blktap_device_init(&device_major);
++ if (err)
++ goto fail;
++
++ err = blktap_ring_init(&ring_major);
++ if (err)
++ goto fail;
++
++ err = blktap_sysfs_init();
++ if (err)
++ goto fail;
++
++ err = blktap_control_init();
++ if (err)
++ goto fail;
++
++ return 0;
++
++fail:
++ blktap_exit();
++ return err;
++}
++
++module_init(blktap_init);
++module_exit(blktap_exit);
++MODULE_LICENSE("Dual BSD/GPL");
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ head-2009-06-09/drivers/xen/blktap2/device.c 2009-06-09 15:01:37.000000000 +0200
+@@ -0,0 +1,1132 @@
++#include <linux/fs.h>
++#include <linux/blkdev.h>
++#include <linux/cdrom.h>
++#include <linux/hdreg.h>
++#include <linux/module.h>
++#include <asm/tlbflush.h>
++
++#include <scsi/scsi.h>
++#include <scsi/scsi_ioctl.h>
++
++#include <xen/xenbus.h>
++#include <xen/interface/io/blkif.h>
++
++#include "blktap.h"
++
++#include "../blkback/blkback-pagemap.h"
++
++#if 0
++#define DPRINTK_IOCTL(_f, _a...) printk(KERN_ALERT _f, ## _a)
++#else
++#define DPRINTK_IOCTL(_f, _a...) ((void)0)
++#endif
++
++struct blktap_grant_table {
++ int cnt;
++ struct gnttab_map_grant_ref grants[BLKIF_MAX_SEGMENTS_PER_REQUEST * 2];
++};
++
++static int blktap_device_major;
++
++static inline struct blktap *
++dev_to_blktap(struct blktap_device *dev)
++{
++ return container_of(dev, struct blktap, device);
++}
++
++static int
++blktap_device_open(struct inode *inode, struct file *filep)
++{
++ struct blktap *tap;
++ struct blktap_device *dev = inode->i_bdev->bd_disk->private_data;
++
++ if (!dev)
++ return -ENOENT;
++
++ tap = dev_to_blktap(dev);
++ if (!blktap_active(tap) ||
++ test_bit(BLKTAP_SHUTDOWN_REQUESTED, &tap->dev_inuse))
++ return -ENOENT;
++
++ dev->users++;
++
++ return 0;
++}
++
++static int
++blktap_device_release(struct inode *inode, struct file *filep)
++{
++ struct blktap_device *dev = inode->i_bdev->bd_disk->private_data;
++ struct blktap *tap = dev_to_blktap(dev);
++
++ dev->users--;
++ if (test_bit(BLKTAP_SHUTDOWN_REQUESTED, &tap->dev_inuse))
++ blktap_device_destroy(tap);
++
++ return 0;
++}
++
++static int
++blktap_device_getgeo(struct block_device *bd, struct hd_geometry *hg)
++{
++ /* We don't have real geometry info, but let's at least return
++ values consistent with the size of the device */
++ sector_t nsect = get_capacity(bd->bd_disk);
++ sector_t cylinders = nsect;
++
++ hg->heads = 0xff;
++ hg->sectors = 0x3f;
++ sector_div(cylinders, hg->heads * hg->sectors);
++ hg->cylinders = cylinders;
++ if ((sector_t)(hg->cylinders + 1) * hg->heads * hg->sectors < nsect)
++ hg->cylinders = 0xffff;
++ return 0;
++}
++
++static int
++blktap_device_ioctl(struct inode *inode, struct file *filep,
++ unsigned command, unsigned long argument)
++{
++ int i;
++
++ DPRINTK_IOCTL("command: 0x%x, argument: 0x%lx, dev: 0x%04x\n",
++ command, (long)argument, inode->i_rdev);
++
++ switch (command) {
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,16)
++ case HDIO_GETGEO: {
++ struct block_device *bd = inode->i_bdev;
++ struct hd_geometry geo;
++ int ret;
++
++ if (!argument)
++ return -EINVAL;
++
++ geo.start = get_start_sect(bd);
++ ret = blktap_device_getgeo(bd, &geo);
++ if (ret)
++ return ret;
++
++ if (copy_to_user((struct hd_geometry __user *)argument, &geo,
++ sizeof(geo)))
++ return -EFAULT;
++
++ return 0;
++ }
++#endif
++ case CDROMMULTISESSION:
++ BTDBG("FIXME: support multisession CDs later\n");
++ for (i = 0; i < sizeof(struct cdrom_multisession); i++)
++ if (put_user(0, (char __user *)(argument + i)))
++ return -EFAULT;
++ return 0;
++
++ case SCSI_IOCTL_GET_IDLUN:
++ if (!access_ok(VERIFY_WRITE, argument,
++ sizeof(struct scsi_idlun)))
++ return -EFAULT;
++
++ /* return 0 for now. */
++ __put_user(0, &((struct scsi_idlun __user *)argument)->dev_id);
++ __put_user(0,
++ &((struct scsi_idlun __user *)argument)->host_unique_id);
++ return 0;
++
++ default:
++ /*printk(KERN_ALERT "ioctl %08x not supported by Xen blkdev\n",
++ command);*/
++ return -EINVAL; /* same return as native Linux */
++ }
++
++ return 0;
++}
++
++static struct block_device_operations blktap_device_file_operations = {
++ .owner = THIS_MODULE,
++ .open = blktap_device_open,
++ .release = blktap_device_release,
++ .ioctl = blktap_device_ioctl,
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
++ .getgeo = blktap_device_getgeo
++#endif
++};
++
++static int
++blktap_map_uaddr_fn(pte_t *ptep, struct page *pmd_page,
++ unsigned long addr, void *data)
++{
++ pte_t *pte = (pte_t *)data;
++
++ BTDBG("ptep %p -> %012llx\n", ptep, (unsigned long long)pte_val(*pte));
++ set_pte(ptep, *pte);
++ return 0;
++}
++
++static int
++blktap_map_uaddr(struct mm_struct *mm, unsigned long address, pte_t pte)
++{
++ return apply_to_page_range(mm, address,
++ PAGE_SIZE, blktap_map_uaddr_fn, &pte);
++}
++
++static int
++blktap_umap_uaddr_fn(pte_t *ptep, struct page *pmd_page,
++ unsigned long addr, void *data)
++{
++ struct mm_struct *mm = (struct mm_struct *)data;
++
++ BTDBG("ptep %p\n", ptep);
++ pte_clear(mm, addr, ptep);
++ return 0;
++}
++
++static int
++blktap_umap_uaddr(struct mm_struct *mm, unsigned long address)
++{
++ return apply_to_page_range(mm, address,
++ PAGE_SIZE, blktap_umap_uaddr_fn, mm);
++}
++
++static inline void
++flush_tlb_kernel_page(unsigned long kvaddr)
++{
++#ifdef CONFIG_X86
++ xen_invlpg_all(kvaddr);
++#else
++ flush_tlb_kernel_range(kvaddr, kvaddr + PAGE_SIZE);
++#endif
++}
++
++static void
++blktap_device_end_dequeued_request(struct blktap_device *dev,
++ struct request *req, int uptodate)
++{
++ int ret;
++
++ ret = end_that_request_first(req, uptodate, req->hard_nr_sectors);
++ BUG_ON(ret);
++
++ spin_lock_irq(&dev->lock);
++ end_that_request_last(req, uptodate);
++ spin_unlock_irq(&dev->lock);
++}
++
++/*
++ * tap->tap_sem held on entry
++ */
++static void
++blktap_device_fast_flush(struct blktap *tap, struct blktap_request *request)
++{
++ uint64_t ptep;
++ int ret, usr_idx;
++ unsigned int i, cnt;
++ struct page **map, *page;
++ struct blktap_ring *ring;
++ struct grant_handle_pair *khandle;
++ unsigned long kvaddr, uvaddr, offset;
++ struct gnttab_unmap_grant_ref unmap[BLKIF_MAX_SEGMENTS_PER_REQUEST * 2];
++
++ cnt = 0;
++ ring = &tap->ring;
++ usr_idx = request->usr_idx;
++ map = ring->foreign_map.map;
++
++ if (!ring->vma)
++ return;
++
++ if (xen_feature(XENFEAT_auto_translated_physmap))
++ zap_page_range(ring->vma,
++ MMAP_VADDR(ring->user_vstart, usr_idx, 0),
++ request->nr_pages << PAGE_SHIFT, NULL);
++
++ for (i = 0; i < request->nr_pages; i++) {
++ kvaddr = request_to_kaddr(request, i);
++ uvaddr = MMAP_VADDR(ring->user_vstart, usr_idx, i);
++
++ khandle = request->handles + i;
++
++ if (khandle->kernel != INVALID_GRANT_HANDLE) {
++ gnttab_set_unmap_op(&unmap[cnt], kvaddr,
++ GNTMAP_host_map, khandle->kernel);
++ cnt++;
++ set_phys_to_machine(__pa(kvaddr) >> PAGE_SHIFT,
++ INVALID_P2M_ENTRY);
++ }
++
++ if (khandle->user != INVALID_GRANT_HANDLE) {
++ BUG_ON(xen_feature(XENFEAT_auto_translated_physmap));
++ if (create_lookup_pte_addr(ring->vma->vm_mm,
++ uvaddr, &ptep) != 0) {
++ BTERR("Couldn't get a pte addr!\n");
++ return;
++ }
++
++ gnttab_set_unmap_op(&unmap[cnt], ptep,
++ GNTMAP_host_map
++ | GNTMAP_application_map
++ | GNTMAP_contains_pte,
++ khandle->user);
++ cnt++;
++ }
++
++ offset = (uvaddr - ring->vma->vm_start) >> PAGE_SHIFT;
++
++ BTDBG("offset: 0x%08lx, page: %p, request: %p, usr_idx: %d, "
++ "seg: %d, kvaddr: 0x%08lx, khandle: %u, uvaddr: "
++ "0x%08lx, handle: %u\n", offset, map[offset], request,
++ usr_idx, i, kvaddr, khandle->kernel, uvaddr,
++ khandle->user);
++
++ page = map[offset];
++ if (page) {
++ ClearPageReserved(map[offset]);
++ if (PageBlkback(page)) {
++ ClearPageBlkback(page);
++ set_page_private(page, 0);
++ }
++ }
++ map[offset] = NULL;
++
++ khandle->kernel = INVALID_GRANT_HANDLE;
++ khandle->user = INVALID_GRANT_HANDLE;
++ }
++
++ if (cnt) {
++ ret = HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref,
++ unmap, cnt);
++ BUG_ON(ret);
++ }
++
++ if (!xen_feature(XENFEAT_auto_translated_physmap))
++ zap_page_range(ring->vma,
++ MMAP_VADDR(ring->user_vstart, usr_idx, 0),
++ request->nr_pages << PAGE_SHIFT, NULL);
++}
++
++/*
++ * tap->tap_sem held on entry
++ */
++static void
++blktap_unmap(struct blktap *tap, struct blktap_request *request)
++{
++ int i, usr_idx;
++ unsigned long kvaddr;
++
++ usr_idx = request->usr_idx;
++ down_write(&tap->ring.vma->vm_mm->mmap_sem);
++
++ for (i = 0; i < request->nr_pages; i++) {
++ BTDBG("request: %p, seg: %d, kvaddr: 0x%08lx, khandle: %u, "
++ "uvaddr: 0x%08lx, uhandle: %u\n", request, i,
++ request_to_kaddr(request, i),
++ request->handles[i].kernel,
++ MMAP_VADDR(tap->ring.user_vstart, usr_idx, i),
++ request->handles[i].user);
++
++ if (request->handles[i].kernel == INVALID_GRANT_HANDLE) {
++ kvaddr = request_to_kaddr(request, i);
++ blktap_umap_uaddr(&init_mm, kvaddr);
++ flush_tlb_kernel_page(kvaddr);
++ set_phys_to_machine(__pa(kvaddr) >> PAGE_SHIFT,
++ INVALID_P2M_ENTRY);
++ }
++ }
++
++ blktap_device_fast_flush(tap, request);
++ up_write(&tap->ring.vma->vm_mm->mmap_sem);
++}
++
++/*
++ * called if the tapdisk process dies unexpectedly.
++ * fail and release any pending requests and disable queue.
++ */
++void
++blktap_device_fail_pending_requests(struct blktap *tap)
++{
++ int usr_idx;
++ struct request *req;
++ struct blktap_device *dev;
++ struct blktap_request *request;
++
++ if (!test_bit(BLKTAP_DEVICE, &tap->dev_inuse))
++ return;
++
++ down_write(&tap->tap_sem);
++
++ dev = &tap->device;
++ for (usr_idx = 0; usr_idx < MAX_PENDING_REQS; usr_idx++) {
++ request = tap->pending_requests[usr_idx];
++ if (!request || request->status != BLKTAP_REQUEST_PENDING)
++ continue;
++
++ BTERR("%u:%u: failing pending %s of %d pages\n",
++ blktap_device_major, tap->minor,
++ (request->operation == BLKIF_OP_READ ?
++ "read" : "write"), request->nr_pages);
++
++ blktap_unmap(tap, request);
++ req = (struct request *)(unsigned long)request->id;
++ blktap_device_end_dequeued_request(dev, req, 0);
++ blktap_request_free(tap, request);
++ }
++
++ up_write(&tap->tap_sem);
++
++ spin_lock_irq(&dev->lock);
++
++ /* fail any future requests */
++ dev->gd->queue->queuedata = NULL;
++ blk_start_queue(dev->gd->queue);
++
++ spin_unlock_irq(&dev->lock);
++}
++
++/*
++ * tap->tap_sem held on entry
++ */
++void
++blktap_device_finish_request(struct blktap *tap,
++ blkif_response_t *res,
++ struct blktap_request *request)
++{
++ int uptodate;
++ struct request *req;
++ struct blktap_device *dev;
++
++ dev = &tap->device;
++
++ blktap_unmap(tap, request);
++
++ req = (struct request *)(unsigned long)request->id;
++ uptodate = (res->status == BLKIF_RSP_OKAY);
++
++ BTDBG("req %p res status %d operation %d/%d id %lld\n", req,
++ res->status, res->operation, request->operation, res->id);
++
++ switch (request->operation) {
++ case BLKIF_OP_READ:
++ case BLKIF_OP_WRITE:
++ if (unlikely(res->status != BLKIF_RSP_OKAY))
++ BTERR("Bad return from device data "
++ "request: %x\n", res->status);
++ blktap_device_end_dequeued_request(dev, req, uptodate);
++ break;
++ default:
++ BUG();
++ }
++
++ blktap_request_free(tap, request);
++}
++
++static int
++blktap_prep_foreign(struct blktap *tap,
++ struct blktap_request *request,
++ blkif_request_t *blkif_req,
++ unsigned int seg, struct page *page,
++ struct blktap_grant_table *table)
++{
++ uint64_t ptep;
++ uint32_t flags;
++ struct page *tap_page;
++ struct blktap_ring *ring;
++ struct blkback_pagemap map;
++ unsigned long uvaddr, kvaddr;
++
++ ring = &tap->ring;
++ map = blkback_pagemap_read(page);
++ blkif_req->seg[seg].gref = map.gref;
++
++ uvaddr = MMAP_VADDR(ring->user_vstart, request->usr_idx, seg);
++ kvaddr = request_to_kaddr(request, seg);
++ flags = GNTMAP_host_map |
++ (request->operation == BLKIF_OP_WRITE ? GNTMAP_readonly : 0);
++
++ gnttab_set_map_op(&table->grants[table->cnt],
++ kvaddr, flags, map.gref, map.domid);
++ table->cnt++;
++
++ /* enable chained tap devices */
++ tap_page = pfn_to_page(__pa(kvaddr) >> PAGE_SHIFT);
++ set_page_private(tap_page, page_private(page));
++ SetPageBlkback(tap_page);
++
++ if (xen_feature(XENFEAT_auto_translated_physmap))
++ return 0;
++
++ if (create_lookup_pte_addr(ring->vma->vm_mm, uvaddr, &ptep)) {
++ BTERR("couldn't get a pte addr!\n");
++ return -1;
++ }
++
++ flags |= GNTMAP_application_map | GNTMAP_contains_pte;
++ gnttab_set_map_op(&table->grants[table->cnt],
++ ptep, flags, map.gref, map.domid);
++ table->cnt++;
++
++ return 0;
++}
++
++static int
++blktap_map_foreign(struct blktap *tap,
++ struct blktap_request *request,
++ blkif_request_t *blkif_req,
++ struct blktap_grant_table *table)
++{
++ struct page *page;
++ int i, grant, err, usr_idx;
++ struct blktap_ring *ring;
++ unsigned long uvaddr, kvaddr, foreign_mfn;
++
++ if (!table->cnt)
++ return 0;
++
++ err = HYPERVISOR_grant_table_op(GNTTABOP_map_grant_ref,
++ table->grants, table->cnt);
++ BUG_ON(err);
++
++ grant = 0;
++ usr_idx = request->usr_idx;
++ ring = &tap->ring;
++
++ for (i = 0; i < request->nr_pages; i++) {
++ if (!blkif_req->seg[i].gref)
++ continue;
++
++ uvaddr = MMAP_VADDR(ring->user_vstart, usr_idx, i);
++ kvaddr = request_to_kaddr(request, i);
++
++ if (unlikely(table->grants[grant].status)) {
++ BTERR("invalid kernel buffer: could not remap it\n");
++ err |= 1;
++ table->grants[grant].handle = INVALID_GRANT_HANDLE;
++ }
++
++ request->handles[i].kernel = table->grants[grant].handle;
++ foreign_mfn = table->grants[grant].dev_bus_addr >> PAGE_SHIFT;
++ grant++;
++
++ if (xen_feature(XENFEAT_auto_translated_physmap))
++ goto done;
++
++ if (unlikely(table->grants[grant].status)) {
++ BTERR("invalid user buffer: could not remap it\n");
++ err |= 1;
++ table->grants[grant].handle = INVALID_GRANT_HANDLE;
++ }
++
++ request->handles[i].user = table->grants[grant].handle;
++ grant++;
++
++ done:
++ if (err)
++ continue;
++
++ page = pfn_to_page(__pa(kvaddr) >> PAGE_SHIFT);
++
++ if (!xen_feature(XENFEAT_auto_translated_physmap))
++ set_phys_to_machine(__pa(kvaddr) >> PAGE_SHIFT,
++ FOREIGN_FRAME(foreign_mfn));
++ else if (vm_insert_page(ring->vma, uvaddr, page))
++ err |= 1;
++
++ BTDBG("pending_req: %p, seg: %d, page: %p, "
++ "kvaddr: 0x%08lx, khandle: %u, uvaddr: 0x%08lx, "
++ "uhandle: %u\n", request, i, page,
++ kvaddr, request->handles[i].kernel,
++ uvaddr, request->handles[i].user);
++ }
++
++ return err;
++}
++
++static void
++blktap_map(struct blktap *tap,
++ struct blktap_request *request,
++ unsigned int seg, struct page *page)
++{
++ pte_t pte;
++ int usr_idx;
++ struct blktap_ring *ring;
++ unsigned long uvaddr, kvaddr;
++
++ ring = &tap->ring;
++ usr_idx = request->usr_idx;
++ uvaddr = MMAP_VADDR(ring->user_vstart, usr_idx, seg);
++ kvaddr = request_to_kaddr(request, seg);
++
++ pte = mk_pte(page, ring->vma->vm_page_prot);
++ blktap_map_uaddr(ring->vma->vm_mm, uvaddr, pte_mkwrite(pte));
++ flush_tlb_page(ring->vma, uvaddr);
++ blktap_map_uaddr(&init_mm, kvaddr, mk_pte(page, PAGE_KERNEL));
++ flush_tlb_kernel_page(kvaddr);
++
++ set_phys_to_machine(__pa(kvaddr) >> PAGE_SHIFT, pte_mfn(pte));
++ request->handles[seg].kernel = INVALID_GRANT_HANDLE;
++ request->handles[seg].user = INVALID_GRANT_HANDLE;
++
++ BTDBG("pending_req: %p, seg: %d, page: %p, kvaddr: 0x%08lx, "
++ "uvaddr: 0x%08lx\n", request, seg, page, kvaddr,
++ uvaddr);
++}
++
++static int
++blktap_device_process_request(struct blktap *tap,
++ struct blktap_request *request,
++ struct request *req)
++{
++ struct page *page;
++ int i, usr_idx, err;
++ struct blktap_ring *ring;
++ struct scatterlist *sg;
++ struct blktap_grant_table table;
++ unsigned int fsect, lsect, nr_sects;
++ unsigned long offset, uvaddr, kvaddr;
++ struct blkif_request blkif_req, *target;
++
++ err = -1;
++ memset(&table, 0, sizeof(table));
++
++ if (!blktap_active(tap))
++ goto out;
++
++ ring = &tap->ring;
++ usr_idx = request->usr_idx;
++ blkif_req.id = usr_idx;
++ blkif_req.sector_number = (blkif_sector_t)req->sector;
++ blkif_req.handle = 0;
++ blkif_req.operation = rq_data_dir(req) ?
++ BLKIF_OP_WRITE : BLKIF_OP_READ;
++
++ request->id = (unsigned long)req;
++ request->operation = blkif_req.operation;
++ request->status = BLKTAP_REQUEST_PENDING;
++ do_gettimeofday(&request->time);
++
++ nr_sects = 0;
++ request->nr_pages = 0;
++ blkif_req.nr_segments = blk_rq_map_sg(req->q, req, tap->sg);
++ BUG_ON(blkif_req.nr_segments > BLKIF_MAX_SEGMENTS_PER_REQUEST);
++ for (i = 0; i < blkif_req.nr_segments; ++i) {
++ sg = tap->sg + i;
++ fsect = sg->offset >> 9;
++ lsect = fsect + (sg->length >> 9) - 1;
++ nr_sects += sg->length >> 9;
++
++ blkif_req.seg[i] =
++ (struct blkif_request_segment) {
++ .gref = 0,
++ .first_sect = fsect,
++ .last_sect = lsect };
++
++ if (PageBlkback(sg->page)) {
++ /* foreign page -- use xen */
++ if (blktap_prep_foreign(tap,
++ request,
++ &blkif_req,
++ i,
++ sg->page,
++ &table))
++ goto out;
++ } else {
++ /* do it the old fashioned way */
++ blktap_map(tap,
++ request,
++ i,
++ sg->page);
++ }
++
++ uvaddr = MMAP_VADDR(ring->user_vstart, usr_idx, i);
++ kvaddr = request_to_kaddr(request, i);
++ offset = (uvaddr - ring->vma->vm_start) >> PAGE_SHIFT;
++ page = pfn_to_page(__pa(kvaddr) >> PAGE_SHIFT);
++ ring->foreign_map.map[offset] = page;
++ SetPageReserved(page);
++
++ BTDBG("mapped uaddr %08lx to page %p pfn 0x%lx\n",
++ uvaddr, page, __pa(kvaddr) >> PAGE_SHIFT);
++ BTDBG("offset: 0x%08lx, pending_req: %p, seg: %d, "
++ "page: %p, kvaddr: 0x%08lx, uvaddr: 0x%08lx\n",
++ offset, request, i,
++ page, kvaddr, uvaddr);
++
++ request->nr_pages++;
++ }
++
++ if (blktap_map_foreign(tap, request, &blkif_req, &table))
++ goto out;
++
++ /* Finally, write the request message to the user ring. */
++ target = RING_GET_REQUEST(&ring->ring, ring->ring.req_prod_pvt);
++ memcpy(target, &blkif_req, sizeof(blkif_req));
++ target->id = request->usr_idx;
++ wmb(); /* blktap_poll() reads req_prod_pvt asynchronously */
++ ring->ring.req_prod_pvt++;
++
++ if (rq_data_dir(req)) {
++ tap->stats.st_wr_sect += nr_sects;
++ tap->stats.st_wr_req++;
++ } else {
++ tap->stats.st_rd_sect += nr_sects;
++ tap->stats.st_rd_req++;
++ }
++
++ err = 0;
++
++out:
++ if (err)
++ blktap_device_fast_flush(tap, request);
++ return err;
++}
++
++#ifdef ENABLE_PASSTHROUGH
++#define rq_for_each_bio_safe(_bio, _tmp, _req) \
++ if ((_req)->bio) \
++ for (_bio = (_req)->bio; \
++ _bio && ((_tmp = _bio->bi_next) || 1); \
++ _bio = _tmp)
++
++static void
++blktap_device_forward_request(struct blktap *tap, struct request *req)
++{
++ struct bio *bio, *tmp;
++ struct blktap_device *dev;
++
++ dev = &tap->device;
++
++ rq_for_each_bio_safe(bio, tmp, req) {
++ bio->bi_bdev = dev->bdev;
++ submit_bio(bio->bi_rw, bio);
++ }
++}
++
++static void
++blktap_device_close_bdev(struct blktap *tap)
++{
++ struct blktap_device *dev;
++
++ dev = &tap->device;
++
++ if (dev->bdev)
++ blkdev_put(dev->bdev);
++
++ dev->bdev = NULL;
++ clear_bit(BLKTAP_PASSTHROUGH, &tap->dev_inuse);
++}
++
++static int
++blktap_device_open_bdev(struct blktap *tap, u32 pdev)
++{
++ struct block_device *bdev;
++ struct blktap_device *dev;
++
++ dev = &tap->device;
++
++ bdev = open_by_devnum(pdev, FMODE_WRITE);
++ if (IS_ERR(bdev)) {
++ BTERR("opening device %x:%x failed: %ld\n",
++ MAJOR(pdev), MINOR(pdev), PTR_ERR(bdev));
++ return PTR_ERR(bdev);
++ }
++
++ if (!bdev->bd_disk) {
++ BTERR("device %x:%x doesn't exist\n",
++ MAJOR(pdev), MINOR(pdev));
++ blkdev_put(dev->bdev);
++ return -ENOENT;
++ }
++
++ dev->bdev = bdev;
++ set_bit(BLKTAP_PASSTHROUGH, &tap->dev_inuse);
++
++ /* TODO: readjust queue parameters */
++
++ BTINFO("set device %d to passthrough on %x:%x\n",
++ tap->minor, MAJOR(pdev), MINOR(pdev));
++
++ return 0;
++}
++
++int
++blktap_device_enable_passthrough(struct blktap *tap,
++ unsigned major, unsigned minor)
++{
++ u32 pdev;
++ struct blktap_device *dev;
++
++ dev = &tap->device;
++ pdev = MKDEV(major, minor);
++
++ if (!test_bit(BLKTAP_PAUSED, &tap->dev_inuse))
++ return -EINVAL;
++
++ if (dev->bdev) {
++ if (pdev)
++ return -EINVAL;
++ blktap_device_close_bdev(tap);
++ return 0;
++ }
++
++ return blktap_device_open_bdev(tap, pdev);
++}
++#endif
++
++/*
++ * dev->lock held on entry
++ */
++static void
++blktap_device_run_queue(struct blktap *tap)
++{
++ int queued, err;
++ request_queue_t *rq;
++ struct request *req;
++ struct blktap_ring *ring;
++ struct blktap_device *dev;
++ struct blktap_request *request;
++
++ queued = 0;
++ ring = &tap->ring;
++ dev = &tap->device;
++ rq = dev->gd->queue;
++
++ BTDBG("running queue for %d\n", tap->minor);
++
++ while ((req = elv_next_request(rq)) != NULL) {
++ if (!blk_fs_request(req)) {
++ end_request(req, 0);
++ continue;
++ }
++
++ if (blk_barrier_rq(req)) {
++ end_request(req, 0);
++ continue;
++ }
++
++#ifdef ENABLE_PASSTHROUGH
++ if (test_bit(BLKTAP_PASSTHROUGH, &tap->dev_inuse)) {
++ blkdev_dequeue_request(req);
++ blktap_device_forward_request(tap, req);
++ continue;
++ }
++#endif
++
++ if (RING_FULL(&ring->ring)) {
++ wait:
++ /* Avoid pointless unplugs. */
++ blk_stop_queue(rq);
++ blktap_defer(tap);
++ break;
++ }
++
++ request = blktap_request_allocate(tap);
++ if (!request) {
++ tap->stats.st_oo_req++;
++ goto wait;
++ }
++
++ BTDBG("req %p: dev %d cmd %p, sec 0x%llx, (0x%x/0x%lx) "
++ "buffer:%p [%s], pending: %p\n", req, tap->minor,
++ req->cmd, req->sector, req->current_nr_sectors,
++ req->nr_sectors, req->buffer,
++ rq_data_dir(req) ? "write" : "read", request);
++
++ blkdev_dequeue_request(req);
++
++ spin_unlock_irq(&dev->lock);
++ down_read(&tap->tap_sem);
++
++ err = blktap_device_process_request(tap, request, req);
++ if (!err)
++ queued++;
++ else {
++ blktap_device_end_dequeued_request(dev, req, 0);
++ blktap_request_free(tap, request);
++ }
++
++ up_read(&tap->tap_sem);
++ spin_lock_irq(&dev->lock);
++ }
++
++ if (queued)
++ blktap_ring_kick_user(tap);
++}
++
++/*
++ * dev->lock held on entry
++ */
++static void
++blktap_device_do_request(request_queue_t *rq)
++{
++ struct request *req;
++ struct blktap *tap;
++ struct blktap_device *dev;
++
++ dev = rq->queuedata;
++ if (!dev)
++ goto fail;
++
++ tap = dev_to_blktap(dev);
++ if (!blktap_active(tap))
++ goto fail;
++
++ if (test_bit(BLKTAP_PAUSED, &tap->dev_inuse) ||
++ test_bit(BLKTAP_PAUSE_REQUESTED, &tap->dev_inuse)) {
++ blktap_defer(tap);
++ return;
++ }
++
++ blktap_device_run_queue(tap);
++ return;
++
++fail:
++ while ((req = elv_next_request(rq))) {
++ BTERR("device closed: failing secs %llu - %llu\n",
++ req->sector, req->sector + req->nr_sectors);
++ end_request(req, 0);
++ }
++}
++
++void
++blktap_device_restart(struct blktap *tap)
++{
++ struct blktap_device *dev;
++
++ dev = &tap->device;
++ if (!dev->gd || !dev->gd->queue)
++ return;
++
++ if (blktap_active(tap) && RING_FULL(&tap->ring.ring)) {
++ blktap_defer(tap);
++ return;
++ }
++
++ if (test_bit(BLKTAP_PAUSED, &tap->dev_inuse) ||
++ test_bit(BLKTAP_PAUSE_REQUESTED, &tap->dev_inuse)) {
++ blktap_defer(tap);
++ return;
++ }
++
++ spin_lock_irq(&dev->lock);
++
++ /* Re-enable calldowns. */
++ if (blk_queue_stopped(dev->gd->queue))
++ blk_start_queue(dev->gd->queue);
++
++ /* Kick things off immediately. */
++ blktap_device_do_request(dev->gd->queue);
++
++ spin_unlock_irq(&dev->lock);
++}
++
++static void
++blktap_device_configure(struct blktap *tap)
++{
++ struct request_queue *rq;
++ struct blktap_device *dev = &tap->device;
++
++ if (!test_bit(BLKTAP_DEVICE, &tap->dev_inuse) || !dev->gd)
++ return;
++
++ dev = &tap->device;
++ rq = dev->gd->queue;
++
++ spin_lock_irq(&dev->lock);
++
++ set_capacity(dev->gd, tap->params.capacity);
++
++ /* Hard sector size and max sectors impersonate the equiv. hardware. */
++ blk_queue_hardsect_size(rq, tap->params.sector_size);
++ blk_queue_max_sectors(rq, 512);
++
++ /* Each segment in a request is up to an aligned page in size. */
++ blk_queue_segment_boundary(rq, PAGE_SIZE - 1);
++ blk_queue_max_segment_size(rq, PAGE_SIZE);
++
++ /* Ensure a merged request will fit in a single I/O ring slot. */
++ blk_queue_max_phys_segments(rq, BLKIF_MAX_SEGMENTS_PER_REQUEST);
++ blk_queue_max_hw_segments(rq, BLKIF_MAX_SEGMENTS_PER_REQUEST);
++
++ /* Make sure buffer addresses are sector-aligned. */
++ blk_queue_dma_alignment(rq, 511);
++
++ spin_unlock_irq(&dev->lock);
++}
++
++int
++blktap_device_resume(struct blktap *tap)
++{
++ int err;
++
++ if (!test_bit(BLKTAP_DEVICE, &tap->dev_inuse) || !blktap_active(tap))
++ return -ENODEV;
++
++ if (!test_bit(BLKTAP_PAUSED, &tap->dev_inuse))
++ return 0;
++
++ err = blktap_ring_resume(tap);
++ if (err)
++ return err;
++
++ /* device size may have changed */
++ blktap_device_configure(tap);
++
++ BTDBG("restarting device\n");
++ blktap_device_restart(tap);
++
++ return 0;
++}
++
++int
++blktap_device_pause(struct blktap *tap)
++{
++ unsigned long flags;
++ struct blktap_device *dev = &tap->device;
++
++ if (!test_bit(BLKTAP_DEVICE, &tap->dev_inuse) || !blktap_active(tap))
++ return -ENODEV;
++
++ if (test_bit(BLKTAP_PAUSED, &tap->dev_inuse))
++ return 0;
++
++ spin_lock_irqsave(&dev->lock, flags);
++
++ blk_stop_queue(dev->gd->queue);
++ set_bit(BLKTAP_PAUSE_REQUESTED, &tap->dev_inuse);
++
++ spin_unlock_irqrestore(&dev->lock, flags);
++
++ return blktap_ring_pause(tap);
++}
++
++int
++blktap_device_destroy(struct blktap *tap)
++{
++ struct blktap_device *dev = &tap->device;
++
++ if (!test_bit(BLKTAP_DEVICE, &tap->dev_inuse))
++ return 0;
++
++ BTINFO("destroy device %d users %d\n", tap->minor, dev->users);
++
++ if (dev->users)
++ return -EBUSY;
++
++ spin_lock_irq(&dev->lock);
++ /* No more blktap_device_do_request(). */
++ blk_stop_queue(dev->gd->queue);
++ clear_bit(BLKTAP_DEVICE, &tap->dev_inuse);
++ spin_unlock_irq(&dev->lock);
++
++#ifdef ENABLE_PASSTHROUGH
++ if (dev->bdev)
++ blktap_device_close_bdev(tap);
++#endif
++
++ del_gendisk(dev->gd);
++ put_disk(dev->gd);
++ blk_cleanup_queue(dev->gd->queue);
++
++ dev->gd = NULL;
++
++ wake_up(&tap->wq);
++
++ return 0;
++}
++
++int
++blktap_device_create(struct blktap *tap)
++{
++ int minor, err;
++ struct gendisk *gd;
++ struct request_queue *rq;
++ struct blktap_device *dev;
++
++ gd = NULL;
++ rq = NULL;
++ dev = &tap->device;
++ minor = tap->minor;
++
++ if (test_bit(BLKTAP_DEVICE, &tap->dev_inuse))
++ return -EEXIST;
++
++ if (blktap_validate_params(tap, &tap->params))
++ return -EINVAL;
++
++ BTINFO("minor %d sectors %Lu sector-size %lu\n",
++ minor, tap->params.capacity, tap->params.sector_size);
++
++ err = -ENODEV;
++
++ gd = alloc_disk(1);
++ if (!gd)
++ goto error;
++
++ if (minor < 26)
++ sprintf(gd->disk_name, "tapdev%c", 'a' + minor);
++ else
++ sprintf(gd->disk_name, "tapdev%c%c",
++ 'a' + ((minor / 26) - 1), 'a' + (minor % 26));
++
++ gd->major = blktap_device_major;
++ gd->first_minor = minor;
++ gd->fops = &blktap_device_file_operations;
++ gd->private_data = dev;
++
++ spin_lock_init(&dev->lock);
++ rq = blk_init_queue(blktap_device_do_request, &dev->lock);
++ if (!rq)
++ goto error;
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10)
++ elevator_init(rq, "noop");
++#else
++ elevator_init(rq, &elevator_noop);
++#endif
++
++ gd->queue = rq;
++ rq->queuedata = dev;
++ dev->gd = gd;
++
++ set_bit(BLKTAP_DEVICE, &tap->dev_inuse);
++ blktap_device_configure(tap);
++
++ add_disk(gd);
++
++ err = 0;
++ goto out;
++
++ error:
++ if (gd)
++ del_gendisk(gd);
++ if (rq)
++ blk_cleanup_queue(rq);
++
++ out:
++ BTINFO("creation of %u:%u: %d\n", blktap_device_major, tap->minor, err);
++ return err;
++}
++
++int
++blktap_device_init(int *maj)
++{
++ int major;
++
++ /* Dynamically allocate a major for this device */
++ major = register_blkdev(0, "tapdev");
++ if (major < 0) {
++ BTERR("Couldn't register blktap device\n");
++ return -ENOMEM;
++ }
++
++ blktap_device_major = *maj = major;
++ BTINFO("blktap device major %d\n", major);
++
++ return 0;
++}
++
++void
++blktap_device_free(void)
++{
++ if (blktap_device_major)
++ if (unregister_blkdev(blktap_device_major, "tapdev"))
++ BTERR("blktap device unregister failed\n");
++}
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ head-2009-06-09/drivers/xen/blktap2/request.c 2009-05-29 10:25:53.000000000 +0200
+@@ -0,0 +1,297 @@
++#include <linux/spinlock.h>
++#include <xen/balloon.h>
++
++#include "blktap.h"
++
++#define MAX_BUCKETS 8
++#define BUCKET_SIZE MAX_PENDING_REQS
++
++#define BLKTAP_POOL_CLOSING 1
++
++struct blktap_request_bucket;
++
++struct blktap_request_handle {
++ int slot;
++ uint8_t inuse;
++ struct blktap_request request;
++ struct blktap_request_bucket *bucket;
++};
++
++struct blktap_request_bucket {
++ atomic_t reqs_in_use;
++ struct blktap_request_handle handles[BUCKET_SIZE];
++ struct page **foreign_pages;
++};
++
++struct blktap_request_pool {
++ spinlock_t lock;
++ uint8_t status;
++ struct list_head free_list;
++ atomic_t reqs_in_use;
++ wait_queue_head_t wait_queue;
++ struct blktap_request_bucket *buckets[MAX_BUCKETS];
++};
++
++static struct blktap_request_pool pool;
++
++static inline struct blktap_request_handle *
++blktap_request_to_handle(struct blktap_request *req)
++{
++ return container_of(req, struct blktap_request_handle, request);
++}
++
++static void
++blktap_request_pool_init_request(struct blktap_request *request)
++{
++ int i;
++
++ request->usr_idx = -1;
++ request->nr_pages = 0;
++ request->status = BLKTAP_REQUEST_FREE;
++ INIT_LIST_HEAD(&request->free_list);
++ for (i = 0; i < ARRAY_SIZE(request->handles); i++) {
++ request->handles[i].user = INVALID_GRANT_HANDLE;
++ request->handles[i].kernel = INVALID_GRANT_HANDLE;
++ }
++}
++
++static int
++blktap_request_pool_allocate_bucket(void)
++{
++ int i, idx;
++ unsigned long flags;
++ struct blktap_request *request;
++ struct blktap_request_handle *handle;
++ struct blktap_request_bucket *bucket;
++
++ bucket = kzalloc(sizeof(struct blktap_request_bucket), GFP_KERNEL);
++ if (!bucket)
++ goto fail;
++
++ bucket->foreign_pages = alloc_empty_pages_and_pagevec(MMAP_PAGES);
++ if (!bucket->foreign_pages)
++ goto fail;
++
++ spin_lock_irqsave(&pool.lock, flags);
++
++ idx = -1;
++ for (i = 0; i < MAX_BUCKETS; i++) {
++ if (!pool.buckets[i]) {
++ idx = i;
++ pool.buckets[idx] = bucket;
++ break;
++ }
++ }
++
++ if (idx == -1) {
++ spin_unlock_irqrestore(&pool.lock, flags);
++ goto fail;
++ }
++
++ for (i = 0; i < BUCKET_SIZE; i++) {
++ handle = bucket->handles + i;
++ request = &handle->request;
++
++ handle->slot = i;
++ handle->inuse = 0;
++ handle->bucket = bucket;
++
++ blktap_request_pool_init_request(request);
++ list_add_tail(&request->free_list, &pool.free_list);
++ }
++
++ spin_unlock_irqrestore(&pool.lock, flags);
++
++ return 0;
++
++fail:
++ if (bucket && bucket->foreign_pages)
++ free_empty_pages_and_pagevec(bucket->foreign_pages, MMAP_PAGES);
++ kfree(bucket);
++ return -ENOMEM;
++}
++
++static void
++blktap_request_pool_free_bucket(struct blktap_request_bucket *bucket)
++{
++ if (!bucket)
++ return;
++
++ BTDBG("freeing bucket %p\n", bucket);
++
++ free_empty_pages_and_pagevec(bucket->foreign_pages, MMAP_PAGES);
++ kfree(bucket);
++}
++
++unsigned long
++request_to_kaddr(struct blktap_request *req, int seg)
++{
++ struct blktap_request_handle *handle = blktap_request_to_handle(req);
++ int idx = handle->slot * BLKIF_MAX_SEGMENTS_PER_REQUEST + seg;
++ unsigned long pfn = page_to_pfn(handle->bucket->foreign_pages[idx]);
++ return (unsigned long)pfn_to_kaddr(pfn);
++}
++
++int
++blktap_request_pool_shrink(void)
++{
++ int i, err;
++ unsigned long flags;
++ struct blktap_request_bucket *bucket;
++
++ err = -EAGAIN;
++
++ spin_lock_irqsave(&pool.lock, flags);
++
++ /* always keep at least one bucket */
++ for (i = 1; i < MAX_BUCKETS; i++) {
++ bucket = pool.buckets[i];
++ if (!bucket)
++ continue;
++
++ if (atomic_read(&bucket->reqs_in_use))
++ continue;
++
++ blktap_request_pool_free_bucket(bucket);
++ pool.buckets[i] = NULL;
++ err = 0;
++ break;
++ }
++
++ spin_unlock_irqrestore(&pool.lock, flags);
++
++ return err;
++}
++
++int
++blktap_request_pool_grow(void)
++{
++ return blktap_request_pool_allocate_bucket();
++}
++
++struct blktap_request *
++blktap_request_allocate(struct blktap *tap)
++{
++ int i;
++ uint16_t usr_idx;
++ unsigned long flags;
++ struct blktap_request *request;
++
++ usr_idx = -1;
++ request = NULL;
++
++ spin_lock_irqsave(&pool.lock, flags);
++
++ if (pool.status == BLKTAP_POOL_CLOSING)
++ goto out;
++
++ for (i = 0; i < ARRAY_SIZE(tap->pending_requests); i++)
++ if (!tap->pending_requests[i]) {
++ usr_idx = i;
++ break;
++ }
++
++ if (usr_idx == (uint16_t)-1)
++ goto out;
++
++ if (!list_empty(&pool.free_list)) {
++ request = list_entry(pool.free_list.next,
++ struct blktap_request, free_list);
++ list_del(&request->free_list);
++ }
++
++ if (request) {
++ struct blktap_request_handle *handle;
++
++ atomic_inc(&pool.reqs_in_use);
++
++ handle = blktap_request_to_handle(request);
++ atomic_inc(&handle->bucket->reqs_in_use);
++ handle->inuse = 1;
++
++ request->usr_idx = usr_idx;
++
++ tap->pending_requests[usr_idx] = request;
++ tap->pending_cnt++;
++ }
++
++out:
++ spin_unlock_irqrestore(&pool.lock, flags);
++ return request;
++}
++
++void
++blktap_request_free(struct blktap *tap, struct blktap_request *request)
++{
++ int free;
++ unsigned long flags;
++ struct blktap_request_handle *handle;
++
++ BUG_ON(request->usr_idx >= ARRAY_SIZE(tap->pending_requests));
++ handle = blktap_request_to_handle(request);
++
++ spin_lock_irqsave(&pool.lock, flags);
++
++ handle->inuse = 0;
++ tap->pending_requests[request->usr_idx] = NULL;
++ blktap_request_pool_init_request(request);
++ list_add(&request->free_list, &pool.free_list);
++ atomic_dec(&handle->bucket->reqs_in_use);
++ free = atomic_dec_and_test(&pool.reqs_in_use);
++
++ spin_unlock_irqrestore(&pool.lock, flags);
++
++ if (--tap->pending_cnt == 0)
++ wake_up_interruptible(&tap->wq);
++
++ if (free)
++ wake_up(&pool.wait_queue);
++}
++
++void
++blktap_request_pool_free(void)
++{
++ int i;
++ unsigned long flags;
++
++ spin_lock_irqsave(&pool.lock, flags);
++
++ pool.status = BLKTAP_POOL_CLOSING;
++ while (atomic_read(&pool.reqs_in_use)) {
++ spin_unlock_irqrestore(&pool.lock, flags);
++ wait_event(pool.wait_queue, !atomic_read(&pool.reqs_in_use));
++ spin_lock_irqsave(&pool.lock, flags);
++ }
++
++ for (i = 0; i < MAX_BUCKETS; i++) {
++ blktap_request_pool_free_bucket(pool.buckets[i]);
++ pool.buckets[i] = NULL;
++ }
++
++ spin_unlock_irqrestore(&pool.lock, flags);
++}
++
++int
++blktap_request_pool_init(void)
++{
++ int i, err;
++
++ memset(&pool, 0, sizeof(pool));
++
++ spin_lock_init(&pool.lock);
++ INIT_LIST_HEAD(&pool.free_list);
++ atomic_set(&pool.reqs_in_use, 0);
++ init_waitqueue_head(&pool.wait_queue);
++
++ for (i = 0; i < 2; i++) {
++ err = blktap_request_pool_allocate_bucket();
++ if (err)
++ goto fail;
++ }
++
++ return 0;
++
++fail:
++ blktap_request_pool_free();
++ return err;
++}
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ head-2009-06-09/drivers/xen/blktap2/ring.c 2009-05-29 10:25:53.000000000 +0200
+@@ -0,0 +1,613 @@
++#include <linux/module.h>
++#include <linux/signal.h>
++
++#include "blktap.h"
++
++static int blktap_ring_major;
++
++static inline struct blktap *
++vma_to_blktap(struct vm_area_struct *vma)
++{
++ struct vm_foreign_map *m = vma->vm_private_data;
++ struct blktap_ring *r = container_of(m, struct blktap_ring, foreign_map);
++ return container_of(r, struct blktap, ring);
++}
++
++ /*
++ * BLKTAP - immediately before the mmap area,
++ * we have a bunch of pages reserved for shared memory rings.
++ */
++#define RING_PAGES 1
++
++static int
++blktap_read_ring(struct blktap *tap)
++{
++ /* This is called to read responses from the ring. */
++ int usr_idx;
++ RING_IDX rc, rp;
++ blkif_response_t res;
++ struct blktap_ring *ring;
++ struct blktap_request *request;
++
++ down_read(&tap->tap_sem);
++
++ ring = &tap->ring;
++ if (!ring->vma) {
++ up_read(&tap->tap_sem);
++ return 0;
++ }
++
++ /* for each outstanding message on the ring */
++ rp = ring->ring.sring->rsp_prod;
++ rmb();
++
++ for (rc = ring->ring.rsp_cons; rc != rp; rc++) {
++ memcpy(&res, RING_GET_RESPONSE(&ring->ring, rc), sizeof(res));
++ mb(); /* rsp_cons read by RING_FULL() in do_block_io_op(). */
++ ++ring->ring.rsp_cons;
++
++ usr_idx = (int)res.id;
++ if (usr_idx >= MAX_PENDING_REQS ||
++ !tap->pending_requests[usr_idx]) {
++ BTWARN("Request %d/%d invalid [%x], tapdisk %d%p\n",
++ rc, rp, usr_idx, tap->pid, ring->vma);
++ continue;
++ }
++
++ request = tap->pending_requests[usr_idx];
++ BTDBG("request %p response #%d id %x\n", request, rc, usr_idx);
++ blktap_device_finish_request(tap, &res, request);
++ }
++
++ up_read(&tap->tap_sem);
++
++ blktap_run_deferred();
++
++ return 0;
++}
++
++static struct page *
++blktap_ring_nopage(struct vm_area_struct *vma,
++ unsigned long address, int *type)
++{
++ /*
++ * if the page has not been mapped in by the driver then return
++ * NOPAGE_SIGBUS to the domain.
++ */
++
++ return NOPAGE_SIGBUS;
++}
++
++static pte_t
++blktap_ring_clear_pte(struct vm_area_struct *vma,
++ unsigned long uvaddr,
++ pte_t *ptep, int is_fullmm)
++{
++ pte_t copy;
++ struct blktap *tap;
++ unsigned long kvaddr;
++ struct page **map, *page;
++ struct blktap_ring *ring;
++ struct blktap_request *request;
++ struct grant_handle_pair *khandle;
++ struct gnttab_unmap_grant_ref unmap[2];
++ int offset, seg, usr_idx, count = 0;
++
++ tap = vma_to_blktap(vma);
++ ring = &tap->ring;
++ map = ring->foreign_map.map;
++ BUG_ON(!map); /* TODO Should this be changed to if statement? */
++
++ /*
++ * Zap entry if the address is before the start of the grant
++ * mapped region.
++ */
++ if (uvaddr < ring->user_vstart)
++ return ptep_get_and_clear_full(vma->vm_mm, uvaddr,
++ ptep, is_fullmm);
++
++ offset = (int)((uvaddr - ring->user_vstart) >> PAGE_SHIFT);
++ usr_idx = offset / BLKIF_MAX_SEGMENTS_PER_REQUEST;
++ seg = offset % BLKIF_MAX_SEGMENTS_PER_REQUEST;
++
++ offset = (int)((uvaddr - vma->vm_start) >> PAGE_SHIFT);
++ page = map[offset];
++ if (page) {
++ ClearPageReserved(page);
++ if (PageBlkback(page)) {
++ ClearPageBlkback(page);
++ set_page_private(page, 0);
++ }
++ }
++ map[offset] = NULL;
++
++ request = tap->pending_requests[usr_idx];
++ kvaddr = request_to_kaddr(request, seg);
++ khandle = request->handles + seg;
++
++ if (khandle->kernel != INVALID_GRANT_HANDLE) {
++ gnttab_set_unmap_op(&unmap[count], kvaddr,
++ GNTMAP_host_map, khandle->kernel);
++ count++;
++
++ set_phys_to_machine(__pa(kvaddr) >> PAGE_SHIFT,
++ INVALID_P2M_ENTRY);
++ }
++
++
++ if (khandle->user != INVALID_GRANT_HANDLE) {
++ BUG_ON(xen_feature(XENFEAT_auto_translated_physmap));
++
++ copy = *ptep;
++ gnttab_set_unmap_op(&unmap[count], virt_to_machine(ptep),
++ GNTMAP_host_map
++ | GNTMAP_application_map
++ | GNTMAP_contains_pte,
++ khandle->user);
++ count++;
++ } else
++ copy = ptep_get_and_clear_full(vma->vm_mm, uvaddr, ptep,
++ is_fullmm);
++
++ if (count)
++ if (HYPERVISOR_grant_table_op(GNTTABOP_unmap_grant_ref,
++ unmap, count))
++ BUG();
++
++ khandle->kernel = INVALID_GRANT_HANDLE;
++ khandle->user = INVALID_GRANT_HANDLE;
++
++ return copy;
++}
++
++static void
++blktap_ring_vm_unmap(struct vm_area_struct *vma)
++{
++ struct blktap *tap = vma_to_blktap(vma);
++
++ down_write(&tap->tap_sem);
++ clear_bit(BLKTAP_RING_VMA, &tap->dev_inuse);
++ clear_bit(BLKTAP_PAUSED, &tap->dev_inuse);
++ clear_bit(BLKTAP_PAUSE_REQUESTED, &tap->dev_inuse);
++ up_write(&tap->tap_sem);
++}
++
++static void
++blktap_ring_vm_close(struct vm_area_struct *vma)
++{
++ struct blktap *tap = vma_to_blktap(vma);
++ struct blktap_ring *ring = &tap->ring;
++
++ blktap_ring_vm_unmap(vma); /* fail future requests */
++ blktap_device_fail_pending_requests(tap); /* fail pending requests */
++ blktap_device_restart(tap); /* fail deferred requests */
++
++ down_write(&tap->tap_sem);
++
++ zap_page_range(vma, vma->vm_start, vma->vm_end - vma->vm_start, NULL);
++
++ kfree(ring->foreign_map.map);
++ ring->foreign_map.map = NULL;
++
++ /* Free the ring page. */
++ ClearPageReserved(virt_to_page(ring->ring.sring));
++ free_page((unsigned long)ring->ring.sring);
++
++ BTINFO("unmapping ring %d\n", tap->minor);
++ ring->ring.sring = NULL;
++ ring->vma = NULL;
++
++ up_write(&tap->tap_sem);
++
++ wake_up(&tap->wq);
++}
++
++static struct vm_operations_struct blktap_ring_vm_operations = {
++ .close = blktap_ring_vm_close,
++ .unmap = blktap_ring_vm_unmap,
++ .nopage = blktap_ring_nopage,
++ .zap_pte = blktap_ring_clear_pte,
++};
++
++static int
++blktap_ring_open(struct inode *inode, struct file *filp)
++{
++ int idx;
++ struct blktap *tap;
++
++ idx = iminor(inode);
++ if (idx < 0 || idx > MAX_BLKTAP_DEVICE || blktaps[idx] == NULL) {
++ BTERR("unable to open device blktap%d\n", idx);
++ return -ENODEV;
++ }
++
++ tap = blktaps[idx];
++
++ BTINFO("opening device blktap%d\n", idx);
++
++ if (!test_bit(BLKTAP_CONTROL, &tap->dev_inuse))
++ return -ENODEV;
++
++ /* Only one process can access ring at a time */
++ if (test_and_set_bit(BLKTAP_RING_FD, &tap->dev_inuse))
++ return -EBUSY;
++
++ filp->private_data = tap;
++ BTINFO("opened device %d\n", tap->minor);
++
++ return 0;
++}
++
++static int
++blktap_ring_release(struct inode *inode, struct file *filp)
++{
++ struct blktap *tap = filp->private_data;
++
++ BTINFO("freeing device %d\n", tap->minor);
++ clear_bit(BLKTAP_RING_FD, &tap->dev_inuse);
++ filp->private_data = NULL;
++ wake_up(&tap->wq);
++ return 0;
++}
++
++/* Note on mmap:
++ * We need to map pages to user space in a way that will allow the block
++ * subsystem set up direct IO to them. This couldn't be done before, because
++ * there isn't really a sane way to translate a user virtual address down to a
++ * physical address when the page belongs to another domain.
++ *
++ * My first approach was to map the page in to kernel memory, add an entry
++ * for it in the physical frame list (using alloc_lomem_region as in blkback)
++ * and then attempt to map that page up to user space. This is disallowed
++ * by xen though, which realizes that we don't really own the machine frame
++ * underlying the physical page.
++ *
++ * The new approach is to provide explicit support for this in xen linux.
++ * The VMA now has a flag, VM_FOREIGN, to indicate that it contains pages
++ * mapped from other vms. vma->vm_private_data is set up as a mapping
++ * from pages to actual page structs. There is a new clause in get_user_pages
++ * that does the right thing for this sort of mapping.
++ */
++static int
++blktap_ring_mmap(struct file *filp, struct vm_area_struct *vma)
++{
++ int size, err;
++ struct page **map;
++ struct blktap *tap;
++ blkif_sring_t *sring;
++ struct blktap_ring *ring;
++
++ tap = filp->private_data;
++ ring = &tap->ring;
++ map = NULL;
++ sring = NULL;
++
++ if (!tap || test_and_set_bit(BLKTAP_RING_VMA, &tap->dev_inuse))
++ return -ENOMEM;
++
++ size = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT;
++ if (size != (MMAP_PAGES + RING_PAGES)) {
++ BTERR("you _must_ map exactly %lu pages!\n",
++ MMAP_PAGES + RING_PAGES);
++ return -EAGAIN;
++ }
++
++ /* Allocate the fe ring. */
++ sring = (blkif_sring_t *)get_zeroed_page(GFP_KERNEL);
++ if (!sring) {
++ BTERR("Couldn't alloc sring.\n");
++ goto fail_mem;
++ }
++
++ map = kzalloc(size * sizeof(struct page *), GFP_KERNEL);
++ if (!map) {
++ BTERR("Couldn't alloc VM_FOREIGN map.\n");
++ goto fail_mem;
++ }
++
++ SetPageReserved(virt_to_page(sring));
++
++ SHARED_RING_INIT(sring);
++ FRONT_RING_INIT(&ring->ring, sring, PAGE_SIZE);
++
++ ring->ring_vstart = vma->vm_start;
++ ring->user_vstart = ring->ring_vstart + (RING_PAGES << PAGE_SHIFT);
++
++ /* Map the ring pages to the start of the region and reserve it. */
++ if (xen_feature(XENFEAT_auto_translated_physmap))
++ err = vm_insert_page(vma, vma->vm_start,
++ virt_to_page(ring->ring.sring));
++ else
++ err = remap_pfn_range(vma, vma->vm_start,
++ __pa(ring->ring.sring) >> PAGE_SHIFT,
++ PAGE_SIZE, vma->vm_page_prot);
++ if (err) {
++ BTERR("Mapping user ring failed: %d\n", err);
++ goto fail;
++ }
++
++ /* Mark this VM as containing foreign pages, and set up mappings. */
++ ring->foreign_map.map = map;
++ vma->vm_private_data = &ring->foreign_map;
++ vma->vm_flags |= VM_FOREIGN;
++ vma->vm_flags |= VM_DONTCOPY;
++ vma->vm_flags |= VM_RESERVED;
++ vma->vm_ops = &blktap_ring_vm_operations;
++
++#ifdef CONFIG_X86
++ vma->vm_mm->context.has_foreign_mappings = 1;
++#endif
++
++ tap->pid = current->pid;
++ BTINFO("blktap: mapping pid is %d\n", tap->pid);
++
++ ring->vma = vma;
++ return 0;
++
++ fail:
++ /* Clear any active mappings. */
++ zap_page_range(vma, vma->vm_start,
++ vma->vm_end - vma->vm_start, NULL);
++ ClearPageReserved(virt_to_page(sring));
++ fail_mem:
++ free_page((unsigned long)sring);
++ kfree(map);
++
++ return -ENOMEM;
++}
++
++static inline void
++blktap_ring_set_message(struct blktap *tap, int msg)
++{
++ struct blktap_ring *ring = &tap->ring;
++
++ down_read(&tap->tap_sem);
++ if (ring->ring.sring)
++ ring->ring.sring->pad[0] = msg;
++ up_read(&tap->tap_sem);
++}
++
++static int
++blktap_ring_ioctl(struct inode *inode, struct file *filp,
++ unsigned int cmd, unsigned long arg)
++{
++ struct blktap_params params;
++ struct blktap *tap = filp->private_data;
++
++ BTDBG("%d: cmd: %u, arg: %lu\n", tap->minor, cmd, arg);
++
++ switch(cmd) {
++ case BLKTAP2_IOCTL_KICK_FE:
++ /* There are fe messages to process. */
++ return blktap_read_ring(tap);
++
++ case BLKTAP2_IOCTL_CREATE_DEVICE:
++ if (!arg)
++ return -EINVAL;
++
++ if (copy_from_user(&params, (struct blktap_params __user *)arg,
++ sizeof(params))) {
++ BTERR("failed to get params\n");
++ return -EFAULT;
++ }
++
++ if (blktap_validate_params(tap, &params)) {
++ BTERR("invalid params\n");
++ return -EINVAL;
++ }
++
++ tap->params = params;
++ return blktap_device_create(tap);
++
++ case BLKTAP2_IOCTL_SET_PARAMS:
++ if (!arg)
++ return -EINVAL;
++
++ if (!test_bit(BLKTAP_PAUSED, &tap->dev_inuse))
++ return -EINVAL;
++
++ if (copy_from_user(&params, (struct blktap_params __user *)arg,
++ sizeof(params))) {
++ BTERR("failed to get params\n");
++ return -EFAULT;
++ }
++
++ if (blktap_validate_params(tap, &params)) {
++ BTERR("invalid params\n");
++ return -EINVAL;
++ }
++
++ tap->params = params;
++ return 0;
++
++ case BLKTAP2_IOCTL_PAUSE:
++ if (!test_bit(BLKTAP_PAUSE_REQUESTED, &tap->dev_inuse))
++ return -EINVAL;
++
++ set_bit(BLKTAP_PAUSED, &tap->dev_inuse);
++ clear_bit(BLKTAP_PAUSE_REQUESTED, &tap->dev_inuse);
++
++ blktap_ring_set_message(tap, 0);
++ wake_up_interruptible(&tap->wq);
++
++ return 0;
++
++
++ case BLKTAP2_IOCTL_REOPEN:
++ if (!test_bit(BLKTAP_PAUSED, &tap->dev_inuse))
++ return -EINVAL;
++
++ if (!arg)
++ return -EINVAL;
++
++ if (copy_to_user((char __user *)arg,
++ tap->params.name,
++ strlen(tap->params.name) + 1))
++ return -EFAULT;
++
++ blktap_ring_set_message(tap, 0);
++ wake_up_interruptible(&tap->wq);
++
++ return 0;
++
++ case BLKTAP2_IOCTL_RESUME:
++ if (!test_bit(BLKTAP_PAUSED, &tap->dev_inuse))
++ return -EINVAL;
++
++ tap->ring.response = (int)arg;
++ if (!tap->ring.response)
++ clear_bit(BLKTAP_PAUSED, &tap->dev_inuse);
++
++ blktap_ring_set_message(tap, 0);
++ wake_up_interruptible(&tap->wq);
++
++ return 0;
++ }
++
++ return -ENOIOCTLCMD;
++}
++
++static unsigned int blktap_ring_poll(struct file *filp, poll_table *wait)
++{
++ struct blktap *tap = filp->private_data;
++ struct blktap_ring *ring = &tap->ring;
++
++ poll_wait(filp, &ring->poll_wait, wait);
++ if (ring->ring.sring->pad[0] != 0 ||
++ ring->ring.req_prod_pvt != ring->ring.sring->req_prod) {
++ RING_PUSH_REQUESTS(&ring->ring);
++ return POLLIN | POLLRDNORM;
++ }
++
++ return 0;
++}
++
++static struct file_operations blktap_ring_file_operations = {
++ .owner = THIS_MODULE,
++ .open = blktap_ring_open,
++ .release = blktap_ring_release,
++ .ioctl = blktap_ring_ioctl,
++ .mmap = blktap_ring_mmap,
++ .poll = blktap_ring_poll,
++};
++
++void
++blktap_ring_kick_user(struct blktap *tap)
++{
++ wake_up_interruptible(&tap->ring.poll_wait);
++}
++
++int
++blktap_ring_resume(struct blktap *tap)
++{
++ int err;
++ struct blktap_ring *ring = &tap->ring;
++
++ if (!blktap_active(tap))
++ return -ENODEV;
++
++ if (!test_bit(BLKTAP_PAUSED, &tap->dev_inuse))
++ return -EINVAL;
++
++ /* set shared flag for resume */
++ ring->response = 0;
++
++ blktap_ring_set_message(tap, BLKTAP2_RING_MESSAGE_RESUME);
++ blktap_ring_kick_user(tap);
++
++ wait_event_interruptible(tap->wq, ring->response ||
++ !test_bit(BLKTAP_PAUSED, &tap->dev_inuse));
++
++ err = ring->response;
++ ring->response = 0;
++
++ BTDBG("err: %d\n", err);
++
++ if (err)
++ return err;
++
++ if (test_bit(BLKTAP_PAUSED, &tap->dev_inuse))
++ return -EAGAIN;
++
++ return 0;
++}
++
++int
++blktap_ring_pause(struct blktap *tap)
++{
++ if (!blktap_active(tap))
++ return -ENODEV;
++
++ if (!test_bit(BLKTAP_PAUSE_REQUESTED, &tap->dev_inuse))
++ return -EINVAL;
++
++ BTDBG("draining queue\n");
++ wait_event_interruptible(tap->wq, !tap->pending_cnt);
++ if (tap->pending_cnt)
++ return -EAGAIN;
++
++ blktap_ring_set_message(tap, BLKTAP2_RING_MESSAGE_PAUSE);
++ blktap_ring_kick_user(tap);
++
++ BTDBG("waiting for tapdisk response\n");
++ wait_event_interruptible(tap->wq, test_bit(BLKTAP_PAUSED, &tap->dev_inuse));
++ if (!test_bit(BLKTAP_PAUSED, &tap->dev_inuse))
++ return -EAGAIN;
++
++ return 0;
++}
++
++int
++blktap_ring_destroy(struct blktap *tap)
++{
++ if (!test_bit(BLKTAP_RING_FD, &tap->dev_inuse) &&
++ !test_bit(BLKTAP_RING_VMA, &tap->dev_inuse))
++ return 0;
++
++ BTDBG("sending tapdisk close message\n");
++ blktap_ring_set_message(tap, BLKTAP2_RING_MESSAGE_CLOSE);
++ blktap_ring_kick_user(tap);
++
++ return -EAGAIN;
++}
++
++static void
++blktap_ring_initialize(struct blktap_ring *ring, int minor)
++{
++ memset(ring, 0, sizeof(*ring));
++ init_waitqueue_head(&ring->poll_wait);
++ ring->devno = MKDEV(blktap_ring_major, minor);
++}
++
++int
++blktap_ring_create(struct blktap *tap)
++{
++ struct blktap_ring *ring = &tap->ring;
++ blktap_ring_initialize(ring, tap->minor);
++ return blktap_sysfs_create(tap);
++}
++
++int
++blktap_ring_init(int *major)
++{
++ int err;
++
++ err = register_chrdev(0, "blktap2", &blktap_ring_file_operations);
++ if (err < 0) {
++ BTERR("error registering blktap ring device: %d\n", err);
++ return err;
++ }
++
++ blktap_ring_major = *major = err;
++ BTINFO("blktap ring major: %d\n", blktap_ring_major);
++ return 0;
++}
++
++int
++blktap_ring_free(void)
++{
++ if (blktap_ring_major)
++ unregister_chrdev(blktap_ring_major, "blktap2");
++
++ return 0;
++}
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ head-2009-06-09/drivers/xen/blktap2/sysfs.c 2009-06-09 15:01:37.000000000 +0200
+@@ -0,0 +1,425 @@
++#include <linux/types.h>
++#include <linux/device.h>
++#include <linux/module.h>
++
++#include "blktap.h"
++
++int blktap_debug_level = 1;
++
++static struct class *class;
++static DECLARE_WAIT_QUEUE_HEAD(sysfs_wq);
++
++static inline void
++blktap_sysfs_get(struct blktap *tap)
++{
++ atomic_inc(&tap->ring.sysfs_refcnt);
++}
++
++static inline void
++blktap_sysfs_put(struct blktap *tap)
++{
++ if (atomic_dec_and_test(&tap->ring.sysfs_refcnt))
++ wake_up(&sysfs_wq);
++}
++
++static inline void
++blktap_sysfs_enter(struct blktap *tap)
++{
++ blktap_sysfs_get(tap); /* pin sysfs device */
++ mutex_lock(&tap->ring.sysfs_mutex); /* serialize sysfs operations */
++}
++
++static inline void
++blktap_sysfs_exit(struct blktap *tap)
++{
++ mutex_unlock(&tap->ring.sysfs_mutex);
++ blktap_sysfs_put(tap);
++}
++
++static ssize_t blktap_sysfs_pause_device(struct class_device *, const char *, size_t);
++CLASS_DEVICE_ATTR(pause, S_IWUSR, NULL, blktap_sysfs_pause_device);
++static ssize_t blktap_sysfs_resume_device(struct class_device *, const char *, size_t);
++CLASS_DEVICE_ATTR(resume, S_IWUSR, NULL, blktap_sysfs_resume_device);
++
++static ssize_t
++blktap_sysfs_set_name(struct class_device *dev, const char *buf, size_t size)
++{
++ int err;
++ struct blktap *tap = (struct blktap *)dev->class_data;
++
++ blktap_sysfs_enter(tap);
++
++ if (!tap->ring.dev ||
++ test_bit(BLKTAP_SHUTDOWN_REQUESTED, &tap->dev_inuse)) {
++ err = -ENODEV;
++ goto out;
++ }
++
++ if (!test_bit(BLKTAP_PAUSED, &tap->dev_inuse)) {
++ err = -EPERM;
++ goto out;
++ }
++
++ if (size > BLKTAP2_MAX_MESSAGE_LEN) {
++ err = -ENAMETOOLONG;
++ goto out;
++ }
++
++ if (strnlen(buf, BLKTAP2_MAX_MESSAGE_LEN) >= BLKTAP2_MAX_MESSAGE_LEN) {
++ err = -EINVAL;
++ goto out;
++ }
++
++ snprintf(tap->params.name, sizeof(tap->params.name) - 1, "%s", buf);
++ err = size;
++
++out:
++ blktap_sysfs_exit(tap);
++ return err;
++}
++
++static ssize_t
++blktap_sysfs_get_name(struct class_device *dev, char *buf)
++{
++ ssize_t size;
++ struct blktap *tap = (struct blktap *)dev->class_data;
++
++ blktap_sysfs_enter(tap);
++
++ if (!tap->ring.dev)
++ size = -ENODEV;
++ else if (tap->params.name[0])
++ size = sprintf(buf, "%s\n", tap->params.name);
++ else
++ size = sprintf(buf, "%d\n", tap->minor);
++
++ blktap_sysfs_exit(tap);
++
++ return size;
++}
++CLASS_DEVICE_ATTR(name, S_IRUSR | S_IWUSR,
++ blktap_sysfs_get_name, blktap_sysfs_set_name);
++
++static ssize_t
++blktap_sysfs_remove_device(struct class_device *dev,
++ const char *buf, size_t size)
++{
++ int err;
++ struct blktap *tap = (struct blktap *)dev->class_data;
++
++ if (!tap->ring.dev)
++ return size;
++
++ if (test_and_set_bit(BLKTAP_SHUTDOWN_REQUESTED, &tap->dev_inuse))
++ return -EBUSY;
++
++ err = blktap_control_destroy_device(tap);
++
++ return (err ? : size);
++}
++CLASS_DEVICE_ATTR(remove, S_IWUSR, NULL, blktap_sysfs_remove_device);
++
++static ssize_t
++blktap_sysfs_pause_device(struct class_device *dev,
++ const char *buf, size_t size)
++{
++ int err;
++ struct blktap *tap = (struct blktap *)dev->class_data;
++
++ blktap_sysfs_enter(tap);
++
++ BTDBG("pausing %u:%u: dev_inuse: %lu\n",
++ MAJOR(tap->ring.devno), MINOR(tap->ring.devno), tap->dev_inuse);
++
++ if (!tap->ring.dev ||
++ test_bit(BLKTAP_SHUTDOWN_REQUESTED, &tap->dev_inuse)) {
++ err = -ENODEV;
++ goto out;
++ }
++
++ if (test_bit(BLKTAP_PAUSE_REQUESTED, &tap->dev_inuse)) {
++ err = -EBUSY;
++ goto out;
++ }
++
++ if (test_bit(BLKTAP_PAUSED, &tap->dev_inuse)) {
++ err = 0;
++ goto out;
++ }
++
++ err = blktap_device_pause(tap);
++ if (!err) {
++ class_device_remove_file(dev, &class_device_attr_pause);
++ class_device_create_file(dev, &class_device_attr_resume);
++ }
++
++out:
++ blktap_sysfs_exit(tap);
++
++ return (err ? err : size);
++}
++
++static ssize_t
++blktap_sysfs_resume_device(struct class_device *dev,
++ const char *buf, size_t size)
++{
++ int err;
++ struct blktap *tap = (struct blktap *)dev->class_data;
++
++ blktap_sysfs_enter(tap);
++
++ if (!tap->ring.dev ||
++ test_bit(BLKTAP_SHUTDOWN_REQUESTED, &tap->dev_inuse)) {
++ err = -ENODEV;
++ goto out;
++ }
++
++ if (!test_bit(BLKTAP_PAUSED, &tap->dev_inuse)) {
++ err = -EINVAL;
++ goto out;
++ }
++
++ err = blktap_device_resume(tap);
++ if (!err) {
++ class_device_remove_file(dev, &class_device_attr_resume);
++ class_device_create_file(dev, &class_device_attr_pause);
++ }
++
++out:
++ blktap_sysfs_exit(tap);
++
++ BTDBG("returning %zd\n", (err ? err : size));
++ return (err ? err : size);
++}
++
++#ifdef ENABLE_PASSTHROUGH
++static ssize_t
++blktap_sysfs_enable_passthrough(struct class_device *dev,
++ const char *buf, size_t size)
++{
++ int err;
++ unsigned major, minor;
++ struct blktap *tap = (struct blktap *)dev->class_data;
++
++ BTINFO("passthrough request enabled\n");
++
++ blktap_sysfs_enter(tap);
++
++ if (!tap->ring.dev ||
++ test_bit(BLKTAP_SHUTDOWN_REQUESTED, &tap->dev_inuse)) {
++ err = -ENODEV;
++ goto out;
++ }
++
++ if (!test_bit(BLKTAP_PAUSED, &tap->dev_inuse)) {
++ err = -EINVAL;
++ goto out;
++ }
++
++ if (test_bit(BLKTAP_PASSTHROUGH, &tap->dev_inuse)) {
++ err = -EINVAL;
++ goto out;
++ }
++
++ err = sscanf(buf, "%x:%x", &major, &minor);
++ if (err != 2) {
++ err = -EINVAL;
++ goto out;
++ }
++
++ err = blktap_device_enable_passthrough(tap, major, minor);
++
++out:
++ blktap_sysfs_exit(tap);
++ BTDBG("returning %d\n", (err ? err : size));
++ return (err ? err : size);
++}
++#endif
++
++static ssize_t
++blktap_sysfs_debug_device(struct class_device *dev, char *buf)
++{
++ char *tmp;
++ int i, ret;
++ struct blktap *tap = (struct blktap *)dev->class_data;
++
++ tmp = buf;
++ blktap_sysfs_get(tap);
++
++ if (!tap->ring.dev) {
++ ret = sprintf(tmp, "no device\n");
++ goto out;
++ }
++
++ tmp += sprintf(tmp, "%s (%u:%u), refcnt: %d, dev_inuse: 0x%08lx\n",
++ tap->params.name, MAJOR(tap->ring.devno),
++ MINOR(tap->ring.devno), atomic_read(&tap->refcnt),
++ tap->dev_inuse);
++ tmp += sprintf(tmp, "capacity: 0x%llx, sector size: 0x%lx, "
++ "device users: %d\n", tap->params.capacity,
++ tap->params.sector_size, tap->device.users);
++
++ down_read(&tap->tap_sem);
++
++ tmp += sprintf(tmp, "pending requests: %d\n", tap->pending_cnt);
++ for (i = 0; i < MAX_PENDING_REQS; i++) {
++ struct blktap_request *req = tap->pending_requests[i];
++ if (!req)
++ continue;
++
++ tmp += sprintf(tmp, "req %d: id: %llu, usr_idx: %d, "
++ "status: 0x%02x, pendcnt: %d, "
++ "nr_pages: %u, op: %d, time: %lu:%lu\n",
++ i, req->id, req->usr_idx,
++ req->status, atomic_read(&req->pendcnt),
++ req->nr_pages, req->operation, req->time.tv_sec,
++ req->time.tv_usec);
++ }
++
++ up_read(&tap->tap_sem);
++ ret = (tmp - buf) + 1;
++
++out:
++ blktap_sysfs_put(tap);
++ BTDBG("%s\n", buf);
++
++ return ret;
++}
++CLASS_DEVICE_ATTR(debug, S_IRUSR, blktap_sysfs_debug_device, NULL);
++
++int
++blktap_sysfs_create(struct blktap *tap)
++{
++ struct blktap_ring *ring;
++ struct class_device *dev;
++
++ if (!class)
++ return -ENODEV;
++
++ ring = &tap->ring;
++
++ dev = class_device_create(class, NULL, ring->devno,
++ NULL, "blktap%d", tap->minor);
++ if (IS_ERR(dev))
++ return PTR_ERR(dev);
++
++ ring->dev = dev;
++ dev->class_data = tap;
++
++ mutex_init(&ring->sysfs_mutex);
++ atomic_set(&ring->sysfs_refcnt, 0);
++ set_bit(BLKTAP_SYSFS, &tap->dev_inuse);
++
++ class_device_create_file(dev, &class_device_attr_name);
++ class_device_create_file(dev, &class_device_attr_remove);
++ class_device_create_file(dev, &class_device_attr_pause);
++ class_device_create_file(dev, &class_device_attr_debug);
++
++ return 0;
++}
++
++int
++blktap_sysfs_destroy(struct blktap *tap)
++{
++ struct blktap_ring *ring;
++ struct class_device *dev;
++
++ ring = &tap->ring;
++ dev = ring->dev;
++ if (!class || !dev)
++ return 0;
++
++ ring->dev = NULL;
++ if (wait_event_interruptible(sysfs_wq,
++ !atomic_read(&tap->ring.sysfs_refcnt)))
++ return -EAGAIN;
++
++ /* XXX: is it safe to remove the class from a sysfs attribute? */
++ class_device_remove_file(dev, &class_device_attr_name);
++ class_device_remove_file(dev, &class_device_attr_remove);
++ class_device_remove_file(dev, &class_device_attr_pause);
++ class_device_remove_file(dev, &class_device_attr_resume);
++ class_device_remove_file(dev, &class_device_attr_debug);
++ class_device_destroy(class, ring->devno);
++
++ clear_bit(BLKTAP_SYSFS, &tap->dev_inuse);
++
++ return 0;
++}
++
++static ssize_t
++blktap_sysfs_show_verbosity(struct class *class, char *buf)
++{
++ return sprintf(buf, "%d\n", blktap_debug_level);
++}
++
++static ssize_t
++blktap_sysfs_set_verbosity(struct class *class, const char *buf, size_t size)
++{
++ int level;
++
++ if (sscanf(buf, "%d", &level) == 1) {
++ blktap_debug_level = level;
++ return size;
++ }
++
++ return -EINVAL;
++}
++CLASS_ATTR(verbosity, S_IRUSR | S_IWUSR,
++ blktap_sysfs_show_verbosity, blktap_sysfs_set_verbosity);
++
++static ssize_t
++blktap_sysfs_show_devices(struct class *class, char *buf)
++{
++ int i, ret;
++ struct blktap *tap;
++
++ ret = 0;
++ for (i = 0; i < MAX_BLKTAP_DEVICE; i++) {
++ tap = blktaps[i];
++ if (!tap)
++ continue;
++
++ if (!test_bit(BLKTAP_DEVICE, &tap->dev_inuse))
++ continue;
++
++ ret += sprintf(buf + ret, "%d ", tap->minor);
++ ret += snprintf(buf + ret, sizeof(tap->params.name) - 1,
++ tap->params.name);
++ ret += sprintf(buf + ret, "\n");
++ }
++
++ return ret;
++}
++CLASS_ATTR(devices, S_IRUSR, blktap_sysfs_show_devices, NULL);
++
++void
++blktap_sysfs_free(void)
++{
++ if (!class)
++ return;
++
++ class_remove_file(class, &class_attr_verbosity);
++ class_remove_file(class, &class_attr_devices);
++
++ class_destroy(class);
++}
++
++int
++blktap_sysfs_init(void)
++{
++ struct class *cls;
++
++ if (class)
++ return -EEXIST;
++
++ cls = class_create(THIS_MODULE, "blktap2");
++ if (IS_ERR(cls))
++ return PTR_ERR(cls);
++
++ class_create_file(cls, &class_attr_verbosity);
++ class_create_file(cls, &class_attr_devices);
++
++ class = cls;
++ return 0;
++}
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ head-2009-06-09/drivers/xen/blktap2/wait_queue.c 2009-05-29 10:25:53.000000000 +0200
+@@ -0,0 +1,40 @@
++#include <linux/list.h>
++#include <linux/spinlock.h>
++
++#include "blktap.h"
++
++static LIST_HEAD(deferred_work_queue);
++static DEFINE_SPINLOCK(deferred_work_lock);
++
++void
++blktap_run_deferred(void)
++{
++ LIST_HEAD(queue);
++ struct blktap *tap;
++ unsigned long flags;
++
++ spin_lock_irqsave(&deferred_work_lock, flags);
++ list_splice_init(&deferred_work_queue, &queue);
++ list_for_each_entry(tap, &queue, deferred_queue)
++ clear_bit(BLKTAP_DEFERRED, &tap->dev_inuse);
++ spin_unlock_irqrestore(&deferred_work_lock, flags);
++
++ while (!list_empty(&queue)) {
++ tap = list_entry(queue.next, struct blktap, deferred_queue);
++ list_del_init(&tap->deferred_queue);
++ blktap_device_restart(tap);
++ }
++}
++
++void
++blktap_defer(struct blktap *tap)
++{
++ unsigned long flags;
++
++ spin_lock_irqsave(&deferred_work_lock, flags);
++ if (!test_bit(BLKTAP_DEFERRED, &tap->dev_inuse)) {
++ set_bit(BLKTAP_DEFERRED, &tap->dev_inuse);
++ list_add_tail(&tap->deferred_queue, &deferred_work_queue);
++ }
++ spin_unlock_irqrestore(&deferred_work_lock, flags);
++}
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ head-2009-06-09/drivers/xen/char/Makefile 2007-07-10 09:42:30.000000000 +0200
@@ -0,0 +1 @@
+obj-$(CONFIG_XEN_DEVMEM) := mem.o
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/char/mem.c 2007-08-06 15:10:49.000000000 +0200
++++ head-2009-06-09/drivers/xen/char/mem.c 2007-08-06 15:10:49.000000000 +0200
@@ -0,0 +1,190 @@
+/*
+ * Originally from linux/drivers/char/mem.c
@@ -6949,12 +10128,12 @@ Acked-by: jbeulich@novell.com
+ .open = open_mem,
+};
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/console/Makefile 2007-06-12 13:13:44.000000000 +0200
++++ head-2009-06-09/drivers/xen/console/Makefile 2007-06-12 13:13:44.000000000 +0200
@@ -0,0 +1,2 @@
+
+obj-y := console.o xencons_ring.o
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/console/console.c 2009-03-18 10:39:31.000000000 +0100
++++ head-2009-06-09/drivers/xen/console/console.c 2009-03-18 10:39:31.000000000 +0100
@@ -0,0 +1,753 @@
+/******************************************************************************
+ * console.c
@@ -7710,7 +10889,7 @@ Acked-by: jbeulich@novell.com
+
+MODULE_LICENSE("Dual BSD/GPL");
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/console/xencons_ring.c 2007-06-12 13:13:44.000000000 +0200
++++ head-2009-06-09/drivers/xen/console/xencons_ring.c 2007-06-12 13:13:44.000000000 +0200
@@ -0,0 +1,143 @@
+/*
+ * This program is free software; you can redistribute it and/or
@@ -7856,7 +11035,7 @@ Acked-by: jbeulich@novell.com
+ (void)xencons_ring_init();
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/core/Makefile 2008-07-21 11:00:33.000000000 +0200
++++ head-2009-06-09/drivers/xen/core/Makefile 2008-07-21 11:00:33.000000000 +0200
@@ -0,0 +1,14 @@
+#
+# Makefile for the linux kernel.
@@ -7873,7 +11052,7 @@ Acked-by: jbeulich@novell.com
+obj-$(CONFIG_KEXEC) += machine_kexec.o
+obj-$(CONFIG_XEN_XENCOMM) += xencomm.o
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/core/cpu_hotplug.c 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/core/cpu_hotplug.c 2009-04-07 13:58:48.000000000 +0200
@@ -0,0 +1,176 @@
+#include <linux/init.h>
+#include <linux/kernel.h>
@@ -8052,7 +11231,7 @@ Acked-by: jbeulich@novell.com
+ xenbus_allowed_cpumask = cpu_present_map;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/core/evtchn.c 2009-03-18 10:39:31.000000000 +0100
++++ head-2009-06-09/drivers/xen/core/evtchn.c 2009-03-18 10:39:31.000000000 +0100
@@ -0,0 +1,1181 @@
+/******************************************************************************
+ * evtchn.c
@@ -9236,7 +12415,7 @@ Acked-by: jbeulich@novell.com
+ }
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/core/features.c 2007-06-12 13:13:44.000000000 +0200
++++ head-2009-06-09/drivers/xen/core/features.c 2007-06-12 13:13:44.000000000 +0200
@@ -0,0 +1,34 @@
+/******************************************************************************
+ * features.c
@@ -9273,7 +12452,7 @@ Acked-by: jbeulich@novell.com
+ }
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/core/firmware.c 2007-06-22 09:08:06.000000000 +0200
++++ head-2009-06-09/drivers/xen/core/firmware.c 2007-06-22 09:08:06.000000000 +0200
@@ -0,0 +1,74 @@
+#include <linux/kernel.h>
+#include <linux/errno.h>
@@ -9350,7 +12529,7 @@ Acked-by: jbeulich@novell.com
+#endif
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/core/gnttab.c 2009-03-18 10:39:31.000000000 +0100
++++ head-2009-06-09/drivers/xen/core/gnttab.c 2009-03-18 10:39:31.000000000 +0100
@@ -0,0 +1,773 @@
+/******************************************************************************
+ * gnttab.c
@@ -10126,7 +13305,7 @@ Acked-by: jbeulich@novell.com
+core_initcall(gnttab_init);
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/core/hypervisor_sysfs.c 2007-07-10 09:42:30.000000000 +0200
++++ head-2009-06-09/drivers/xen/core/hypervisor_sysfs.c 2007-07-10 09:42:30.000000000 +0200
@@ -0,0 +1,57 @@
+/*
+ * copyright (c) 2006 IBM Corporation
@@ -10186,7 +13365,7 @@ Acked-by: jbeulich@novell.com
+
+device_initcall(hypervisor_subsys_init);
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/core/machine_kexec.c 2008-10-13 13:43:45.000000000 +0200
++++ head-2009-06-09/drivers/xen/core/machine_kexec.c 2008-10-13 13:43:45.000000000 +0200
@@ -0,0 +1,222 @@
+/*
+ * drivers/xen/core/machine_kexec.c
@@ -10411,7 +13590,7 @@ Acked-by: jbeulich@novell.com
+ * End:
+ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/core/machine_reboot.c 2008-09-01 12:07:31.000000000 +0200
++++ head-2009-06-09/drivers/xen/core/machine_reboot.c 2008-09-01 12:07:31.000000000 +0200
@@ -0,0 +1,247 @@
+#include <linux/version.h>
+#include <linux/kernel.h>
@@ -10661,7 +13840,7 @@ Acked-by: jbeulich@novell.com
+ return 0;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/core/pci.c 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/core/pci.c 2009-04-07 13:58:48.000000000 +0200
@@ -0,0 +1,83 @@
+/*
+ * vim:shiftwidth=8:noexpandtab
@@ -10747,7 +13926,7 @@ Acked-by: jbeulich@novell.com
+
+core_initcall(hook_pci_bus);
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/core/reboot.c 2008-08-07 12:44:36.000000000 +0200
++++ head-2009-06-09/drivers/xen/core/reboot.c 2008-08-07 12:44:36.000000000 +0200
@@ -0,0 +1,335 @@
+#define __KERNEL_SYSCALLS__
+#include <linux/version.h>
@@ -11085,7 +14264,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* !defined(CONFIG_XEN) */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/core/smpboot.c 2009-05-19 09:16:41.000000000 +0200
++++ head-2009-06-09/drivers/xen/core/smpboot.c 2009-05-19 09:16:41.000000000 +0200
@@ -0,0 +1,460 @@
+/*
+ * Xen SMP booting functions
@@ -11548,7 +14727,7 @@ Acked-by: jbeulich@novell.com
+}
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/core/xen_proc.c 2007-06-12 13:13:44.000000000 +0200
++++ head-2009-06-09/drivers/xen/core/xen_proc.c 2007-06-12 13:13:44.000000000 +0200
@@ -0,0 +1,23 @@
+
+#include <linux/module.h>
@@ -11574,7 +14753,7 @@ Acked-by: jbeulich@novell.com
+
+EXPORT_SYMBOL_GPL(remove_xen_proc_entry);
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/core/xen_sysfs.c 2008-10-29 09:55:56.000000000 +0100
++++ head-2009-06-09/drivers/xen/core/xen_sysfs.c 2009-05-29 10:25:53.000000000 +0200
@@ -0,0 +1,427 @@
+/*
+ * copyright (c) 2006 IBM Corporation
@@ -11594,6 +14773,7 @@ Acked-by: jbeulich@novell.com
+#include <xen/hypervisor_sysfs.h>
+#include <xen/xenbus.h>
+#include <xen/interface/kexec.h>
++#include "../xenbus/xenbus_comms.h"
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Mike D. Day <ncmike@us.ibm.com>");
@@ -11683,9 +14863,8 @@ Acked-by: jbeulich@novell.com
+{
+ char *vm, *val;
+ int ret;
-+ extern int xenstored_ready;
+
-+ if (!xenstored_ready)
++ if (!is_xenstored_ready())
+ return -EBUSY;
+
+ vm = xenbus_read(XBT_NIL, "vm", "", NULL);
@@ -12004,7 +15183,7 @@ Acked-by: jbeulich@novell.com
+module_init(hyper_sysfs_init);
+module_exit(hyper_sysfs_exit);
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/core/xencomm.c 2007-11-12 08:41:05.000000000 +0100
++++ head-2009-06-09/drivers/xen/core/xencomm.c 2007-11-12 08:41:05.000000000 +0100
@@ -0,0 +1,229 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
@@ -12236,12 +15415,12 @@ Acked-by: jbeulich@novell.com
+ return xencomm_pa(desc);
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/evtchn/Makefile 2007-06-12 13:13:44.000000000 +0200
++++ head-2009-06-09/drivers/xen/evtchn/Makefile 2007-06-12 13:13:44.000000000 +0200
@@ -0,0 +1,2 @@
+
+obj-y := evtchn.o
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/evtchn/evtchn.c 2009-03-18 10:39:31.000000000 +0100
++++ head-2009-06-09/drivers/xen/evtchn/evtchn.c 2009-03-18 10:39:31.000000000 +0100
@@ -0,0 +1,562 @@
+/******************************************************************************
+ * evtchn.c
@@ -12806,12 +15985,12 @@ Acked-by: jbeulich@novell.com
+
+MODULE_LICENSE("Dual BSD/GPL");
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/fbfront/Makefile 2007-06-12 13:13:45.000000000 +0200
++++ head-2009-06-09/drivers/xen/fbfront/Makefile 2007-06-12 13:13:45.000000000 +0200
@@ -0,0 +1,2 @@
+obj-$(CONFIG_XEN_FRAMEBUFFER) := xenfb.o
+obj-$(CONFIG_XEN_KEYBOARD) += xenkbd.o
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/fbfront/xenfb.c 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/drivers/xen/fbfront/xenfb.c 2009-03-18 10:39:32.000000000 +0100
@@ -0,0 +1,888 @@
+/*
+ * linux/drivers/video/xenfb.c -- Xen para-virtual frame buffer device
@@ -13702,7 +16881,7 @@ Acked-by: jbeulich@novell.com
+
+MODULE_LICENSE("GPL");
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/fbfront/xenkbd.c 2008-04-02 12:34:02.000000000 +0200
++++ head-2009-06-09/drivers/xen/fbfront/xenkbd.c 2008-04-02 12:34:02.000000000 +0200
@@ -0,0 +1,354 @@
+/*
+ * linux/drivers/input/keyboard/xenkbd.c -- Xen para-virtual input device
@@ -14059,11 +17238,11 @@ Acked-by: jbeulich@novell.com
+
+MODULE_LICENSE("GPL");
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/gntdev/Makefile 2008-01-07 13:19:18.000000000 +0100
++++ head-2009-06-09/drivers/xen/gntdev/Makefile 2008-01-07 13:19:18.000000000 +0100
@@ -0,0 +1 @@
+obj-$(CONFIG_XEN_GRANT_DEV) := gntdev.o
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/gntdev/gntdev.c 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/drivers/xen/gntdev/gntdev.c 2009-03-18 10:39:32.000000000 +0100
@@ -0,0 +1,1074 @@
+/******************************************************************************
+ * gntdev.c
@@ -15140,7 +18319,7 @@ Acked-by: jbeulich@novell.com
+ return 0;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/netback/Makefile 2007-07-12 08:54:23.000000000 +0200
++++ head-2009-06-09/drivers/xen/netback/Makefile 2007-07-12 08:54:23.000000000 +0200
@@ -0,0 +1,5 @@
+obj-$(CONFIG_XEN_NETDEV_BACKEND) := netbk.o
+obj-$(CONFIG_XEN_NETDEV_LOOPBACK) += netloop.o
@@ -15148,7 +18327,7 @@ Acked-by: jbeulich@novell.com
+netbk-y := netback.o xenbus.o interface.o accel.o
+netloop-y := loopback.o
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/netback/accel.c 2008-01-07 13:19:18.000000000 +0100
++++ head-2009-06-09/drivers/xen/netback/accel.c 2008-01-07 13:19:18.000000000 +0100
@@ -0,0 +1,269 @@
+/******************************************************************************
+ * drivers/xen/netback/accel.c
@@ -15420,7 +18599,7 @@ Acked-by: jbeulich@novell.com
+ INIT_LIST_HEAD(&accelerators_list);
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/netback/common.h 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/drivers/xen/netback/common.h 2009-03-18 10:39:32.000000000 +0100
@@ -0,0 +1,220 @@
+/******************************************************************************
+ * arch/xen/drivers/netif/backend/common.h
@@ -15643,7 +18822,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __NETIF__BACKEND__COMMON_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/netback/interface.c 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/drivers/xen/netback/interface.c 2009-03-18 10:39:32.000000000 +0100
@@ -0,0 +1,393 @@
+/******************************************************************************
+ * arch/xen/drivers/netif/backend/interface.c
@@ -16039,7 +19218,7 @@ Acked-by: jbeulich@novell.com
+ free_netdev(netif->dev);
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/netback/loopback.c 2007-08-06 15:10:49.000000000 +0200
++++ head-2009-06-09/drivers/xen/netback/loopback.c 2007-08-06 15:10:49.000000000 +0200
@@ -0,0 +1,324 @@
+/******************************************************************************
+ * netback/loopback.c
@@ -16366,8 +19545,8 @@ Acked-by: jbeulich@novell.com
+
+MODULE_LICENSE("Dual BSD/GPL");
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/netback/netback.c 2009-03-18 10:39:32.000000000 +0100
-@@ -0,0 +1,1636 @@
++++ head-2009-06-09/drivers/xen/netback/netback.c 2009-05-29 10:25:53.000000000 +0200
+@@ -0,0 +1,1661 @@
+/******************************************************************************
+ * drivers/xen/netback/netback.c
+ *
@@ -16512,6 +19691,9 @@ Acked-by: jbeulich@novell.com
+static int MODPARM_copy_skb = 1;
+module_param_named(copy_skb, MODPARM_copy_skb, bool, 0);
+MODULE_PARM_DESC(copy_skb, "Copy data received from netfront without netloop");
++static int MODPARM_permute_returns = 0;
++module_param_named(permute_returns, MODPARM_permute_returns, bool, S_IRUSR|S_IWUSR);
++MODULE_PARM_DESC(permute_returns, "Randomly permute the order in which TX responses are sent to the frontend");
+
+int netbk_copy_skb_mode;
+
@@ -17236,6 +20418,25 @@ Acked-by: jbeulich@novell.com
+ &mmap_pages[pending_idx]);
+}
+
++static void permute_dealloc_ring(PEND_RING_IDX dc, PEND_RING_IDX dp)
++{
++ static unsigned random_src = 0x12345678;
++ unsigned dst_offset;
++ PEND_RING_IDX dest;
++ u16 tmp;
++
++ while (dc != dp) {
++ dst_offset = (random_src / 256) % (dp - dc);
++ dest = dc + dst_offset;
++ tmp = dealloc_ring[MASK_PEND_IDX(dest)];
++ dealloc_ring[MASK_PEND_IDX(dest)] =
++ dealloc_ring[MASK_PEND_IDX(dc)];
++ dealloc_ring[MASK_PEND_IDX(dc)] = tmp;
++ dc++;
++ random_src *= 68389;
++ }
++}
++
+inline static void net_tx_action_dealloc(void)
+{
+ struct netbk_tx_pending_inuse *inuse, *n;
@@ -17258,6 +20459,9 @@ Acked-by: jbeulich@novell.com
+ /* Ensure we see all indices enqueued by netif_idx_release(). */
+ smp_rmb();
+
++ if (MODPARM_permute_returns)
++ permute_dealloc_ring(dc, dp);
++
+ while (dc != dp) {
+ unsigned long pfn;
+
@@ -18005,7 +21209,7 @@ Acked-by: jbeulich@novell.com
+
+MODULE_LICENSE("Dual BSD/GPL");
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/netback/xenbus.c 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/drivers/xen/netback/xenbus.c 2009-03-18 10:39:32.000000000 +0100
@@ -0,0 +1,454 @@
+/* Xenbus code for netif backend
+ Copyright (C) 2005 Rusty Russell <rusty@rustcorp.com.au>
@@ -18462,14 +21666,14 @@ Acked-by: jbeulich@novell.com
+ xenbus_register_backend(&netback);
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/netfront/Makefile 2007-07-12 08:54:23.000000000 +0200
++++ head-2009-06-09/drivers/xen/netfront/Makefile 2007-07-12 08:54:23.000000000 +0200
@@ -0,0 +1,4 @@
+
+obj-$(CONFIG_XEN_NETDEV_FRONTEND) := xennet.o
+
+xennet-objs := netfront.o accel.o
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/netfront/accel.c 2009-05-04 10:01:03.000000000 +0200
++++ head-2009-06-09/drivers/xen/netfront/accel.c 2009-05-04 10:01:03.000000000 +0200
@@ -0,0 +1,827 @@
+/******************************************************************************
+ * Virtual network driver for conversing with remote driver backends.
@@ -19299,7 +22503,7 @@ Acked-by: jbeulich@novell.com
+}
+
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/netfront/netfront.c 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/netfront/netfront.c 2009-04-07 13:58:48.000000000 +0200
@@ -0,0 +1,2247 @@
+/******************************************************************************
+ * Virtual network driver for conversing with remote driver backends.
@@ -21549,7 +24753,7 @@ Acked-by: jbeulich@novell.com
+
+MODULE_LICENSE("Dual BSD/GPL");
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/netfront/netfront.h 2008-01-07 13:19:18.000000000 +0100
++++ head-2009-06-09/drivers/xen/netfront/netfront.h 2008-01-07 13:19:18.000000000 +0100
@@ -0,0 +1,274 @@
+/******************************************************************************
+ * Virtual network driver for conversing with remote driver backends.
@@ -21826,7 +25030,7 @@ Acked-by: jbeulich@novell.com
+ struct xenbus_device *dev);
+#endif /* NETFRONT_H */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/pciback/Makefile 2008-07-21 11:00:33.000000000 +0200
++++ head-2009-06-09/drivers/xen/pciback/Makefile 2008-07-21 11:00:33.000000000 +0200
@@ -0,0 +1,17 @@
+obj-$(CONFIG_XEN_PCIDEV_BACKEND) += pciback.o
+
@@ -21846,7 +25050,7 @@ Acked-by: jbeulich@novell.com
+EXTRA_CFLAGS += -DDEBUG
+endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/pciback/conf_space.c 2009-05-04 10:01:03.000000000 +0200
++++ head-2009-06-09/drivers/xen/pciback/conf_space.c 2009-05-04 10:01:03.000000000 +0200
@@ -0,0 +1,435 @@
+/*
+ * PCI Backend - Functions for creating a virtual configuration space for
@@ -22284,7 +25488,7 @@ Acked-by: jbeulich@novell.com
+ return pciback_config_capability_init();
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/pciback/conf_space.h 2008-10-29 09:55:56.000000000 +0100
++++ head-2009-06-09/drivers/xen/pciback/conf_space.h 2008-10-29 09:55:56.000000000 +0100
@@ -0,0 +1,126 @@
+/*
+ * PCI Backend - Common data structures for overriding the configuration space
@@ -22413,7 +25617,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __XEN_PCIBACK_CONF_SPACE_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/pciback/conf_space_capability.c 2008-10-29 09:55:56.000000000 +0100
++++ head-2009-06-09/drivers/xen/pciback/conf_space_capability.c 2008-10-29 09:55:56.000000000 +0100
@@ -0,0 +1,69 @@
+/*
+ * PCI Backend - Handles the virtual fields found on the capability lists
@@ -22485,7 +25689,7 @@ Acked-by: jbeulich@novell.com
+ return 0;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/pciback/conf_space_capability.h 2008-10-29 09:55:56.000000000 +0100
++++ head-2009-06-09/drivers/xen/pciback/conf_space_capability.h 2008-10-29 09:55:56.000000000 +0100
@@ -0,0 +1,23 @@
+/*
+ * PCI Backend - Data structures for special overlays for structures on
@@ -22511,7 +25715,7 @@ Acked-by: jbeulich@novell.com
+
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/pciback/conf_space_capability_msi.c 2008-09-15 13:40:15.000000000 +0200
++++ head-2009-06-09/drivers/xen/pciback/conf_space_capability_msi.c 2008-09-15 13:40:15.000000000 +0200
@@ -0,0 +1,79 @@
+/*
+ * PCI Backend -- Configuration overlay for MSI capability
@@ -22593,7 +25797,7 @@ Acked-by: jbeulich@novell.com
+}
+
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/pciback/conf_space_capability_pm.c 2008-10-29 09:55:56.000000000 +0100
++++ head-2009-06-09/drivers/xen/pciback/conf_space_capability_pm.c 2008-10-29 09:55:56.000000000 +0100
@@ -0,0 +1,126 @@
+/*
+ * PCI Backend - Configuration space overlay for power management
@@ -22722,7 +25926,7 @@ Acked-by: jbeulich@novell.com
+ .fields = caplist_pm,
+};
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/pciback/conf_space_capability_vpd.c 2008-10-29 09:55:56.000000000 +0100
++++ head-2009-06-09/drivers/xen/pciback/conf_space_capability_vpd.c 2008-10-29 09:55:56.000000000 +0100
@@ -0,0 +1,40 @@
+/*
+ * PCI Backend - Configuration space overlay for Vital Product Data
@@ -22765,7 +25969,7 @@ Acked-by: jbeulich@novell.com
+ .fields = caplist_vpd,
+};
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/pciback/conf_space_header.c 2008-10-29 09:55:56.000000000 +0100
++++ head-2009-06-09/drivers/xen/pciback/conf_space_header.c 2008-10-29 09:55:56.000000000 +0100
@@ -0,0 +1,317 @@
+/*
+ * PCI Backend - Handles the virtual fields in the configuration space headers.
@@ -23085,7 +26289,7 @@ Acked-by: jbeulich@novell.com
+ return err;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/pciback/conf_space_quirks.c 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/drivers/xen/pciback/conf_space_quirks.c 2009-03-18 10:39:32.000000000 +0100
@@ -0,0 +1,138 @@
+/*
+ * PCI Backend - Handle special overlays for broken devices.
@@ -23226,7 +26430,7 @@ Acked-by: jbeulich@novell.com
+ return ret;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/pciback/conf_space_quirks.h 2007-06-12 13:13:45.000000000 +0200
++++ head-2009-06-09/drivers/xen/pciback/conf_space_quirks.h 2007-06-12 13:13:45.000000000 +0200
@@ -0,0 +1,35 @@
+/*
+ * PCI Backend - Data structures for special overlays for broken devices.
@@ -23264,7 +26468,7 @@ Acked-by: jbeulich@novell.com
+
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/pciback/controller.c 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/drivers/xen/pciback/controller.c 2009-03-18 10:39:32.000000000 +0100
@@ -0,0 +1,443 @@
+/*
+ * Copyright (C) 2007 Hewlett-Packard Development Company, L.P.
@@ -23710,7 +26914,7 @@ Acked-by: jbeulich@novell.com
+}
+
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/pciback/passthrough.c 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/drivers/xen/pciback/passthrough.c 2009-03-18 10:39:32.000000000 +0100
@@ -0,0 +1,176 @@
+/*
+ * PCI Backend - Provides restricted access to the real PCI bus topology
@@ -23889,8 +27093,8 @@ Acked-by: jbeulich@novell.com
+ return 1;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/pciback/pci_stub.c 2009-03-18 10:39:32.000000000 +0100
-@@ -0,0 +1,1277 @@
++++ head-2009-06-09/drivers/xen/pciback/pci_stub.c 2009-06-09 15:01:37.000000000 +0200
+@@ -0,0 +1,1316 @@
+/*
+ * PCI Stub Driver - Grabs devices in backend to be exported later
+ *
@@ -24522,12 +27726,22 @@ Acked-by: jbeulich@novell.com
+ dev->bus->number,
+ PCI_SLOT(dev->devfn),
+ PCI_FUNC(dev->devfn));
-+ if ( !psdev || !psdev->pdev || !psdev->pdev->sh_info )
++
++ if ( !psdev || !psdev->pdev )
+ {
+ dev_err(&dev->dev,
-+ "pciback device is not found/in use/connected!\n");
++ "pciback device is not found/assigned\n");
+ goto end;
+ }
++
++ if ( !psdev->pdev->sh_info )
++ {
++ dev_err(&dev->dev, "pciback device is not connected or owned"
++ " by HVM, kill it\n");
++ kill_domain_by_device(psdev);
++ goto release;
++ }
++
+ if ( !test_bit(_XEN_PCIB_AERHANDLER,
+ (unsigned long *)&psdev->pdev->sh_info->flags) ) {
+ dev_err(&dev->dev,
@@ -24572,12 +27786,22 @@ Acked-by: jbeulich@novell.com
+ dev->bus->number,
+ PCI_SLOT(dev->devfn),
+ PCI_FUNC(dev->devfn));
-+ if ( !psdev || !psdev->pdev || !psdev->pdev->sh_info)
++
++ if ( !psdev || !psdev->pdev )
+ {
+ dev_err(&dev->dev,
-+ "pciback device is not found/in use/connected!\n");
++ "pciback device is not found/assigned\n");
+ goto end;
+ }
++
++ if ( !psdev->pdev->sh_info )
++ {
++ dev_err(&dev->dev, "pciback device is not connected or owned"
++ " by HVM, kill it\n");
++ kill_domain_by_device(psdev);
++ goto release;
++ }
++
+ if ( !test_bit(_XEN_PCIB_AERHANDLER,
+ (unsigned long *)&psdev->pdev->sh_info->flags) ) {
+ dev_err(&dev->dev,
@@ -24622,12 +27846,22 @@ Acked-by: jbeulich@novell.com
+ dev->bus->number,
+ PCI_SLOT(dev->devfn),
+ PCI_FUNC(dev->devfn));
-+ if ( !psdev || !psdev->pdev || !psdev->pdev->sh_info)
++
++ if ( !psdev || !psdev->pdev )
+ {
+ dev_err(&dev->dev,
-+ "pciback device is not found/in use/connected!\n");
++ "pciback device is not found/assigned\n");
+ goto end;
+ }
++
++ if ( !psdev->pdev->sh_info )
++ {
++ dev_err(&dev->dev, "pciback device is not connected or owned"
++ " by HVM, kill it\n");
++ kill_domain_by_device(psdev);
++ goto release;
++ }
++
+ /*Guest owns the device yet no aer handler regiested, kill guest*/
+ if ( !test_bit(_XEN_PCIB_AERHANDLER,
+ (unsigned long *)&psdev->pdev->sh_info->flags) ) {
@@ -24668,13 +27902,22 @@ Acked-by: jbeulich@novell.com
+ dev->bus->number,
+ PCI_SLOT(dev->devfn),
+ PCI_FUNC(dev->devfn));
-+ if ( !psdev || !psdev->pdev || !psdev->pdev->sh_info)
++
++ if ( !psdev || !psdev->pdev )
+ {
+ dev_err(&dev->dev,
-+ "pciback device is not found/in use/connected!\n");
++ "pciback device is not found/assigned\n");
+ goto end;
+ }
+
++ if ( !psdev->pdev->sh_info )
++ {
++ dev_err(&dev->dev, "pciback device is not connected or owned"
++ " by HVM, kill it\n");
++ kill_domain_by_device(psdev);
++ goto release;
++ }
++
+ if ( !test_bit(_XEN_PCIB_AERHANDLER,
+ (unsigned long *)&psdev->pdev->sh_info->flags) ) {
+ dev_err(&dev->dev,
@@ -25169,7 +28412,7 @@ Acked-by: jbeulich@novell.com
+
+MODULE_LICENSE("Dual BSD/GPL");
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/pciback/pciback.h 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/drivers/xen/pciback/pciback.h 2009-03-18 10:39:32.000000000 +0100
@@ -0,0 +1,126 @@
+/*
+ * PCI Backend Common Data Structures & Function Declarations
@@ -25298,7 +28541,7 @@ Acked-by: jbeulich@novell.com
+#endif
+
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/pciback/pciback_ops.c 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/drivers/xen/pciback/pciback_ops.c 2009-03-18 10:39:32.000000000 +0100
@@ -0,0 +1,134 @@
+/*
+ * PCI Backend Operations - respond to PCI requests from Frontend
@@ -25435,7 +28678,7 @@ Acked-by: jbeulich@novell.com
+ return IRQ_HANDLED;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/pciback/slot.c 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/drivers/xen/pciback/slot.c 2009-03-18 10:39:32.000000000 +0100
@@ -0,0 +1,187 @@
+/*
+ * PCI Backend - Provides a Virtual PCI bus (with real devices)
@@ -25625,7 +28868,7 @@ Acked-by: jbeulich@novell.com
+
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/pciback/vpci.c 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/drivers/xen/pciback/vpci.c 2009-03-18 10:39:32.000000000 +0100
@@ -0,0 +1,242 @@
+/*
+ * PCI Backend - Provides a Virtual PCI bus (with real devices)
@@ -25870,7 +29113,7 @@ Acked-by: jbeulich@novell.com
+ return found;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/pciback/xenbus.c 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/pciback/xenbus.c 2009-04-07 13:58:48.000000000 +0200
@@ -0,0 +1,710 @@
+/*
+ * PCI Backend Xenbus Setup - handles setup with frontend and xend
@@ -26583,7 +29826,7 @@ Acked-by: jbeulich@novell.com
+ xenbus_unregister_driver(&xenbus_pciback_driver);
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/pcifront/Makefile 2007-06-12 13:13:45.000000000 +0200
++++ head-2009-06-09/drivers/xen/pcifront/Makefile 2007-06-12 13:13:45.000000000 +0200
@@ -0,0 +1,7 @@
+obj-y += pcifront.o
+
@@ -26593,7 +29836,7 @@ Acked-by: jbeulich@novell.com
+EXTRA_CFLAGS += -DDEBUG
+endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/pcifront/pci.c 2007-06-12 13:13:45.000000000 +0200
++++ head-2009-06-09/drivers/xen/pcifront/pci.c 2007-06-12 13:13:45.000000000 +0200
@@ -0,0 +1,46 @@
+/*
+ * PCI Frontend Operations - ensure only one PCI frontend runs at a time
@@ -26642,7 +29885,7 @@ Acked-by: jbeulich@novell.com
+ spin_unlock(&pcifront_dev_lock);
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/pcifront/pci_op.c 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/drivers/xen/pcifront/pci_op.c 2009-03-18 10:39:32.000000000 +0100
@@ -0,0 +1,666 @@
+/*
+ * PCI Frontend Operations - Communicates with frontend
@@ -27311,7 +30554,7 @@ Acked-by: jbeulich@novell.com
+ return IRQ_HANDLED;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/pcifront/pcifront.h 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/drivers/xen/pcifront/pcifront.h 2009-03-18 10:39:32.000000000 +0100
@@ -0,0 +1,55 @@
+/*
+ * PCI Frontend - Common data structures & function declarations
@@ -27369,7 +30612,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __XEN_PCIFRONT_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/pcifront/xenbus.c 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/pcifront/xenbus.c 2009-04-07 13:58:48.000000000 +0200
@@ -0,0 +1,468 @@
+/*
+ * PCI Frontend Xenbus Setup - handles setup with backend (imports page/evtchn)
@@ -27840,13 +31083,13 @@ Acked-by: jbeulich@novell.com
+/* Initialize after the Xen PCI Frontend Stub is initialized */
+subsys_initcall(pcifront_init);
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/privcmd/Makefile 2007-07-10 09:42:30.000000000 +0200
++++ head-2009-06-09/drivers/xen/privcmd/Makefile 2007-07-10 09:42:30.000000000 +0200
@@ -0,0 +1,3 @@
+
+obj-y += privcmd.o
+obj-$(CONFIG_COMPAT) += compat_privcmd.o
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/privcmd/compat_privcmd.c 2007-07-10 09:42:30.000000000 +0200
++++ head-2009-06-09/drivers/xen/privcmd/compat_privcmd.c 2007-07-10 09:42:30.000000000 +0200
@@ -0,0 +1,73 @@
+/*
+ * This program is free software; you can redistribute it and/or modify
@@ -27922,7 +31165,7 @@ Acked-by: jbeulich@novell.com
+ return ret;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/privcmd/privcmd.c 2008-07-21 11:00:33.000000000 +0200
++++ head-2009-06-09/drivers/xen/privcmd/privcmd.c 2008-07-21 11:00:33.000000000 +0200
@@ -0,0 +1,356 @@
+/******************************************************************************
+ * privcmd.c
@@ -28281,14 +31524,14 @@ Acked-by: jbeulich@novell.com
+
+__initcall(privcmd_init);
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/scsiback/Makefile 2008-07-21 11:00:33.000000000 +0200
++++ head-2009-06-09/drivers/xen/scsiback/Makefile 2008-07-21 11:00:33.000000000 +0200
@@ -0,0 +1,4 @@
+obj-$(CONFIG_XEN_SCSI_BACKEND) := xen-scsibk.o
+
+xen-scsibk-y := interface.o scsiback.o xenbus.o translate.o emulate.o
+
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/scsiback/common.h 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/drivers/xen/scsiback/common.h 2009-03-18 10:39:32.000000000 +0100
@@ -0,0 +1,186 @@
+/*
+ * Copyright (c) 2008, FUJITSU Limited
@@ -28477,7 +31720,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __SCSIIF__BACKEND__COMMON_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/scsiback/emulate.c 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/drivers/xen/scsiback/emulate.c 2009-03-18 10:39:32.000000000 +0100
@@ -0,0 +1,474 @@
+/*
+ * Xen SCSI backend driver
@@ -28954,7 +32197,7 @@ Acked-by: jbeulich@novell.com
+ return;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/scsiback/interface.c 2008-07-21 11:00:33.000000000 +0200
++++ head-2009-06-09/drivers/xen/scsiback/interface.c 2008-07-21 11:00:33.000000000 +0200
@@ -0,0 +1,182 @@
+/*
+ * interface management.
@@ -29139,7 +32382,7 @@ Acked-by: jbeulich@novell.com
+ kmem_cache_destroy(scsiback_cachep);
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/scsiback/scsiback.c 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/drivers/xen/scsiback/scsiback.c 2009-03-18 10:39:32.000000000 +0100
@@ -0,0 +1,741 @@
+/*
+ * Xen SCSI backend driver
@@ -29883,7 +33126,7 @@ Acked-by: jbeulich@novell.com
+MODULE_DESCRIPTION("Xen SCSI backend driver");
+MODULE_LICENSE("Dual BSD/GPL");
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/scsiback/translate.c 2008-07-21 11:00:33.000000000 +0200
++++ head-2009-06-09/drivers/xen/scsiback/translate.c 2008-07-21 11:00:33.000000000 +0200
@@ -0,0 +1,168 @@
+/*
+ * Xen SCSI backend driver
@@ -30054,7 +33297,7 @@ Acked-by: jbeulich@novell.com
+
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/scsiback/xenbus.c 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/drivers/xen/scsiback/xenbus.c 2009-03-18 10:39:32.000000000 +0100
@@ -0,0 +1,378 @@
+/*
+ * Xen SCSI backend driver
@@ -30435,13 +33678,13 @@ Acked-by: jbeulich@novell.com
+ xenbus_unregister_driver(&scsiback);
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/scsifront/Makefile 2008-07-21 11:00:33.000000000 +0200
++++ head-2009-06-09/drivers/xen/scsifront/Makefile 2008-07-21 11:00:33.000000000 +0200
@@ -0,0 +1,3 @@
+
+obj-$(CONFIG_XEN_SCSI_FRONTEND) := xenscsi.o
+xenscsi-objs := scsifront.o xenbus.o
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/scsifront/common.h 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/drivers/xen/scsifront/common.h 2009-03-18 10:39:32.000000000 +0100
@@ -0,0 +1,136 @@
+/*
+ * Xen SCSI frontend driver
@@ -30580,7 +33823,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __XEN_DRIVERS_SCSIFRONT_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/scsifront/scsifront.c 2008-07-21 11:00:33.000000000 +0200
++++ head-2009-06-09/drivers/xen/scsifront/scsifront.c 2008-07-21 11:00:33.000000000 +0200
@@ -0,0 +1,511 @@
+/*
+ * Xen SCSI frontend driver
@@ -31094,7 +34337,7 @@ Acked-by: jbeulich@novell.com
+MODULE_DESCRIPTION("Xen SCSI frontend driver");
+MODULE_LICENSE("GPL");
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/scsifront/xenbus.c 2008-07-21 11:00:33.000000000 +0200
++++ head-2009-06-09/drivers/xen/scsifront/xenbus.c 2008-07-21 11:00:33.000000000 +0200
@@ -0,0 +1,421 @@
+/*
+ * Xen SCSI frontend driver
@@ -31518,7 +34761,7 @@ Acked-by: jbeulich@novell.com
+}
+
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/Makefile 2008-02-26 10:54:11.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netback/Makefile 2008-02-26 10:54:11.000000000 +0100
@@ -0,0 +1,12 @@
+EXTRA_CFLAGS += -Idrivers/xen/sfc_netback -Idrivers/xen/sfc_netutil -Idrivers/xen/netback -Idrivers/net/sfc
+EXTRA_CFLAGS += -D__ci_driver__
@@ -31533,7 +34776,7 @@ Acked-by: jbeulich@novell.com
+
+sfc_netback-objs := accel.o accel_fwd.o accel_msg.o accel_solarflare.o accel_xenbus.o accel_debugfs.o
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/accel.c 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netback/accel.c 2009-04-07 13:58:48.000000000 +0200
@@ -0,0 +1,147 @@
+/****************************************************************************
+ * Solarflare driver for Xen network acceleration
@@ -31683,7 +34926,7 @@ Acked-by: jbeulich@novell.com
+
+MODULE_LICENSE("GPL");
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/accel.h 2009-04-07 14:39:57.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netback/accel.h 2009-04-07 14:39:57.000000000 +0200
@@ -0,0 +1,393 @@
+/****************************************************************************
+ * Solarflare driver for Xen network acceleration
@@ -32079,7 +35322,7 @@ Acked-by: jbeulich@novell.com
+
+
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/accel_debugfs.c 2008-02-26 10:54:11.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netback/accel_debugfs.c 2008-02-26 10:54:11.000000000 +0100
@@ -0,0 +1,148 @@
+/****************************************************************************
+ * Solarflare driver for Xen network acceleration
@@ -32230,7 +35473,7 @@ Acked-by: jbeulich@novell.com
+
+
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/accel_fwd.c 2008-04-02 12:34:02.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netback/accel_fwd.c 2008-04-02 12:34:02.000000000 +0200
@@ -0,0 +1,420 @@
+/****************************************************************************
+ * Solarflare driver for Xen network acceleration
@@ -32653,7 +35896,7 @@ Acked-by: jbeulich@novell.com
+ return;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/accel_msg.c 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netback/accel_msg.c 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,392 @@
+/****************************************************************************
+ * Solarflare driver for Xen network acceleration
@@ -33048,7 +36291,7 @@ Acked-by: jbeulich@novell.com
+ return;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/accel_solarflare.c 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netback/accel_solarflare.c 2009-04-07 13:58:48.000000000 +0200
@@ -0,0 +1,1269 @@
+/****************************************************************************
+ * Solarflare driver for Xen network acceleration
@@ -34320,7 +37563,7 @@ Acked-by: jbeulich@novell.com
+ spin_unlock_irqrestore(&accel_hw_priv->filter_lock, flags);
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/accel_solarflare.h 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netback/accel_solarflare.h 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,88 @@
+/****************************************************************************
+ * Solarflare driver for Xen network acceleration
@@ -34411,7 +37654,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* NETBACK_ACCEL_SOLARFLARE_H */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/accel_xenbus.c 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netback/accel_xenbus.c 2009-04-07 13:58:48.000000000 +0200
@@ -0,0 +1,832 @@
+/****************************************************************************
+ * Solarflare driver for Xen network acceleration
@@ -35246,7 +38489,7 @@ Acked-by: jbeulich@novell.com
+ XenbusStateClosing);
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/ci/compat.h 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netback/ci/compat.h 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,53 @@
+/****************************************************************************
+ * Copyright 2002-2005: Level 5 Networks Inc.
@@ -35302,7 +38545,7 @@ Acked-by: jbeulich@novell.com
+
+/*! \cidoxg_end */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/ci/compat/gcc.h 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netback/ci/compat/gcc.h 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,158 @@
+/****************************************************************************
+ * Copyright 2002-2005: Level 5 Networks Inc.
@@ -35463,7 +38706,7 @@ Acked-by: jbeulich@novell.com
+
+/*! \cidoxg_end */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/ci/compat/gcc_x86.h 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netback/ci/compat/gcc_x86.h 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,115 @@
+/****************************************************************************
+ * Copyright 2002-2005: Level 5 Networks Inc.
@@ -35581,7 +38824,7 @@ Acked-by: jbeulich@novell.com
+
+/*! \cidoxg_end */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/ci/compat/primitive.h 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netback/ci/compat/primitive.h 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,77 @@
+/****************************************************************************
+ * Copyright 2002-2005: Level 5 Networks Inc.
@@ -35661,7 +38904,7 @@ Acked-by: jbeulich@novell.com
+
+/*! \cidoxg_end */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/ci/compat/sysdep.h 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netback/ci/compat/sysdep.h 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,166 @@
+/****************************************************************************
+ * Copyright 2002-2005: Level 5 Networks Inc.
@@ -35830,7 +39073,7 @@ Acked-by: jbeulich@novell.com
+
+/*! \cidoxg_end */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/ci/compat/utils.h 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netback/ci/compat/utils.h 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,269 @@
+/****************************************************************************
+ * Copyright 2002-2005: Level 5 Networks Inc.
@@ -36102,7 +39345,7 @@ Acked-by: jbeulich@novell.com
+#endif /* __CI_COMPAT_UTILS_H__ */
+/*! \cidoxg_end */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/ci/compat/x86.h 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netback/ci/compat/x86.h 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,48 @@
+/****************************************************************************
+ * Copyright 2002-2005: Level 5 Networks Inc.
@@ -36153,7 +39396,7 @@ Acked-by: jbeulich@novell.com
+
+/*! \cidoxg_end */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/ci/compat/x86_64.h 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netback/ci/compat/x86_64.h 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,54 @@
+/****************************************************************************
+ * Copyright 2002-2005: Level 5 Networks Inc.
@@ -36210,7 +39453,7 @@ Acked-by: jbeulich@novell.com
+#endif /* __CI_COMPAT_X86_64_H__ */
+/*! \cidoxg_end */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/ci/driver/resource/efx_vi.h 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netback/ci/driver/resource/efx_vi.h 2009-04-07 13:58:48.000000000 +0200
@@ -0,0 +1,273 @@
+/****************************************************************************
+ * Driver for Solarflare network controllers -
@@ -36486,7 +39729,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __CI_DRIVER_RESOURCE_EFX_VI_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/ci/efhw/common.h 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netback/ci/efhw/common.h 2009-04-07 13:58:48.000000000 +0200
@@ -0,0 +1,98 @@
+/****************************************************************************
+ * Driver for Solarflare network controllers -
@@ -36587,7 +39830,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __CI_EFHW_COMMON_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/ci/efhw/common_sysdep.h 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netback/ci/efhw/common_sysdep.h 2009-04-07 13:58:48.000000000 +0200
@@ -0,0 +1,71 @@
+/****************************************************************************
+ * Driver for Solarflare network controllers -
@@ -36661,7 +39904,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __CI_EFHW_COMMON_LINUX_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/ci/efhw/debug.h 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netback/ci/efhw/debug.h 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,84 @@
+/****************************************************************************
+ * Driver for Solarflare network controllers -
@@ -36748,7 +39991,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __CI_EFHW_DEBUG_LINUX_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/ci/efhw/efhw_config.h 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netback/ci/efhw/efhw_config.h 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,43 @@
+/****************************************************************************
+ * Driver for Solarflare network controllers -
@@ -36794,7 +40037,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __CI_EFHW_EFAB_CONFIG_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/ci/efhw/efhw_types.h 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netback/ci/efhw/efhw_types.h 2009-04-07 13:58:48.000000000 +0200
@@ -0,0 +1,337 @@
+/****************************************************************************
+ * Driver for Solarflare network controllers -
@@ -37134,7 +40377,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __CI_EFHW_EFHW_TYPES_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/ci/efhw/hardware_sysdep.h 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netback/ci/efhw/hardware_sysdep.h 2009-04-07 13:58:48.000000000 +0200
@@ -0,0 +1,86 @@
+/****************************************************************************
+ * Driver for Solarflare network controllers -
@@ -37223,7 +40466,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __CI_EFHW_HARDWARE_LINUX_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/ci/efhw/iopage_types.h 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netback/ci/efhw/iopage_types.h 2009-04-07 13:58:48.000000000 +0200
@@ -0,0 +1,195 @@
+/****************************************************************************
+ * Driver for Solarflare network controllers -
@@ -37421,7 +40664,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __CI_EFHW_IOPAGE_LINUX_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/ci/efhw/public.h 2009-04-07 14:39:57.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netback/ci/efhw/public.h 2009-04-07 14:39:57.000000000 +0200
@@ -0,0 +1,83 @@
+/****************************************************************************
+ * Driver for Solarflare network controllers -
@@ -37507,7 +40750,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __CI_EFHW_PUBLIC_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/ci/efhw/sysdep.h 2009-04-07 14:39:57.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netback/ci/efhw/sysdep.h 2009-04-07 14:39:57.000000000 +0200
@@ -0,0 +1,72 @@
+/****************************************************************************
+ * Driver for Solarflare network controllers -
@@ -37582,7 +40825,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __CI_EFHW_SYSDEP_LINUX_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/ci/efrm/nic_table.h 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netback/ci/efrm/nic_table.h 2009-04-07 13:58:48.000000000 +0200
@@ -0,0 +1,98 @@
+/****************************************************************************
+ * Driver for Solarflare network controllers -
@@ -37683,7 +40926,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __CI_EFRM_NIC_TABLE_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/ci/efrm/sysdep.h 2009-04-07 14:39:57.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netback/ci/efrm/sysdep.h 2009-04-07 14:39:57.000000000 +0200
@@ -0,0 +1,54 @@
+/****************************************************************************
+ * Driver for Solarflare network controllers -
@@ -37740,7 +40983,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __CI_EFRM_SYSDEP_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/ci/efrm/sysdep_linux.h 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netback/ci/efrm/sysdep_linux.h 2009-04-07 13:58:48.000000000 +0200
@@ -0,0 +1,267 @@
+/****************************************************************************
+ * Driver for Solarflare network controllers -
@@ -38010,7 +41253,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __CI_EFRM_SYSDEP_LINUX_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/ci/tools/config.h 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netback/ci/tools/config.h 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,49 @@
+/****************************************************************************
+ * Copyright 2002-2005: Level 5 Networks Inc.
@@ -38062,7 +41305,7 @@ Acked-by: jbeulich@novell.com
+#endif /* __CI_TOOLS_CONFIG_H__ */
+/*! \cidoxg_end */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/ci/tools/debug.h 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netback/ci/tools/debug.h 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,336 @@
+/****************************************************************************
+ * Copyright 2002-2005: Level 5 Networks Inc.
@@ -38401,7 +41644,7 @@ Acked-by: jbeulich@novell.com
+
+/*! \cidoxg_end */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/ci/tools/log.h 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netback/ci/tools/log.h 2009-04-07 13:58:48.000000000 +0200
@@ -0,0 +1,269 @@
+/****************************************************************************
+ * Copyright 2002-2005: Level 5 Networks Inc.
@@ -38673,7 +41916,7 @@ Acked-by: jbeulich@novell.com
+#endif /* __CI_TOOLS_LOG_H__ */
+/*! \cidoxg_end */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/ci/tools/platform/gcc_x86.h 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netback/ci/tools/platform/gcc_x86.h 2009-04-07 13:58:48.000000000 +0200
@@ -0,0 +1,370 @@
+/****************************************************************************
+ * Copyright 2002-2005: Level 5 Networks Inc.
@@ -39046,7 +42289,7 @@ Acked-by: jbeulich@novell.com
+
+/*! \cidoxg_end */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/ci/tools/platform/linux_kernel.h 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netback/ci/tools/platform/linux_kernel.h 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,362 @@
+/****************************************************************************
+ * Copyright 2002-2005: Level 5 Networks Inc.
@@ -39411,7 +42654,7 @@ Acked-by: jbeulich@novell.com
+#endif /* __CI_TOOLS_LINUX_KERNEL_H__ */
+/*! \cidoxg_end */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netback/ci/tools/sysdep.h 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netback/ci/tools/sysdep.h 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,132 @@
+/****************************************************************************
+ * Copyright 2002-2005: Level 5 Networks Inc.
@@ -39546,7 +42789,7 @@ Acked-by: jbeulich@novell.com
+
+/*! \cidoxg_end */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netfront/Makefile 2008-02-26 10:54:11.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netfront/Makefile 2008-02-26 10:54:11.000000000 +0100
@@ -0,0 +1,11 @@
+EXTRA_CFLAGS += -Idrivers/xen/sfc_netfront -Idrivers/xen/sfc_netutil -Idrivers/xen/netfront
+EXTRA_CFLAGS += -D__ci_driver__
@@ -39560,7 +42803,7 @@ Acked-by: jbeulich@novell.com
+
+sfc_netfront-objs := accel_msg.o accel_bufs.o accel_netfront.o accel_vi.o accel_xenbus.o accel_tso.o accel_ssr.o accel_debugfs.o falcon_event.o falcon_vi.o pt_tx.o vi_init.o
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netfront/accel.h 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netfront/accel.h 2009-04-07 13:58:48.000000000 +0200
@@ -0,0 +1,495 @@
+/****************************************************************************
+ * Solarflare driver for Xen network acceleration
@@ -40058,7 +43301,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* NETFRONT_ACCEL_H */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netfront/accel_bufs.c 2008-02-26 10:54:12.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netfront/accel_bufs.c 2008-02-26 10:54:12.000000000 +0100
@@ -0,0 +1,393 @@
+/****************************************************************************
+ * Solarflare driver for Xen network acceleration
@@ -40454,7 +43697,7 @@ Acked-by: jbeulich@novell.com
+ return was_empty;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netfront/accel_bufs.h 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netfront/accel_bufs.h 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,181 @@
+/****************************************************************************
+ * Solarflare driver for Xen network acceleration
@@ -40638,7 +43881,7 @@ Acked-by: jbeulich@novell.com
+#endif /* NETFRONT_ACCEL_BUFS_H */
+
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netfront/accel_debugfs.c 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netfront/accel_debugfs.c 2009-04-07 13:58:48.000000000 +0200
@@ -0,0 +1,227 @@
+/****************************************************************************
+ * Solarflare driver for Xen network acceleration
@@ -40868,7 +44111,7 @@ Acked-by: jbeulich@novell.com
+ return 0;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netfront/accel_msg.c 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netfront/accel_msg.c 2009-04-07 13:58:48.000000000 +0200
@@ -0,0 +1,564 @@
+/****************************************************************************
+ * Solarflare driver for Xen network acceleration
@@ -41435,7 +44678,7 @@ Acked-by: jbeulich@novell.com
+ &lock_state, vnic->msg_channel_irq);
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netfront/accel_netfront.c 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netfront/accel_netfront.c 2009-04-07 13:58:48.000000000 +0200
@@ -0,0 +1,328 @@
+/****************************************************************************
+ * Solarflare driver for Xen network acceleration
@@ -41766,7 +45009,7 @@ Acked-by: jbeulich@novell.com
+MODULE_LICENSE("GPL");
+
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netfront/accel_ssr.c 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netfront/accel_ssr.c 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,308 @@
+/****************************************************************************
+ * Solarflare driver for Xen network acceleration
@@ -42077,7 +45320,7 @@ Acked-by: jbeulich@novell.com
+ return 0;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netfront/accel_ssr.h 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netfront/accel_ssr.h 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,88 @@
+/****************************************************************************
+ * Solarflare driver for Xen network acceleration
@@ -42168,7 +45411,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* NETFRONT_ACCEL_SSR_H */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netfront/accel_tso.c 2008-02-26 10:54:12.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netfront/accel_tso.c 2008-02-26 10:54:12.000000000 +0100
@@ -0,0 +1,511 @@
+/****************************************************************************
+ * Solarflare driver for Xen network acceleration
@@ -42682,7 +45925,7 @@ Acked-by: jbeulich@novell.com
+
+
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netfront/accel_tso.h 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netfront/accel_tso.h 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,57 @@
+/****************************************************************************
+ * Solarflare driver for Xen network acceleration
@@ -42742,7 +45985,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* NETFRONT_ACCEL_TSO_H */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netfront/accel_vi.c 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netfront/accel_vi.c 2009-04-07 13:58:48.000000000 +0200
@@ -0,0 +1,1200 @@
+/****************************************************************************
+ * Solarflare driver for Xen network acceleration
@@ -43945,7 +47188,7 @@ Acked-by: jbeulich@novell.com
+ return 1;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netfront/accel_xenbus.c 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netfront/accel_xenbus.c 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,776 @@
+/****************************************************************************
+ * Solarflare driver for Xen network acceleration
@@ -44724,7 +47967,7 @@ Acked-by: jbeulich@novell.com
+ return 0;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netfront/ef_vi_falcon.h 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netfront/ef_vi_falcon.h 2009-04-07 13:58:48.000000000 +0200
@@ -0,0 +1,172 @@
+/****************************************************************************
+ * Copyright 2002-2005: Level 5 Networks Inc.
@@ -44899,7 +48142,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __EF_VI_FALCON_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netfront/ef_vi_falcon_core.h 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netfront/ef_vi_falcon_core.h 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,1075 @@
+
+#define EFVI_FALCON_EXTENDED_P_BAR 1
@@ -45977,7 +49220,7 @@ Acked-by: jbeulich@novell.com
+ #define EE_VPD_CYC_DAT_LBN 0
+ #define EE_VPD_CYC_DAT_WIDTH 32
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netfront/ef_vi_falcon_desc.h 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netfront/ef_vi_falcon_desc.h 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,43 @@
+//////////////---- Descriptors C Headers ----//////////////
+// Receive Kernel IP Descriptor
@@ -46023,7 +49266,7 @@ Acked-by: jbeulich@novell.com
+ #define TX_USR_BYTE_OFS_LBN 0
+ #define TX_USR_BYTE_OFS_WIDTH 13
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netfront/ef_vi_falcon_event.h 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netfront/ef_vi_falcon_event.h 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,123 @@
+//////////////---- Events Format C Header ----//////////////
+//////////////---- Event entry ----//////////////
@@ -46149,7 +49392,7 @@ Acked-by: jbeulich@novell.com
+ #define DRV_GEN_EV_DATA_LBN 0
+ #define DRV_GEN_EV_DATA_WIDTH 60
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netfront/ef_vi_internal.h 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netfront/ef_vi_internal.h 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,256 @@
+/****************************************************************************
+ * Copyright 2002-2005: Level 5 Networks Inc.
@@ -46408,7 +49651,7 @@ Acked-by: jbeulich@novell.com
+#endif /* __CI_EF_VI_INTERNAL_H__ */
+
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netfront/etherfabric/ef_vi.h 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netfront/etherfabric/ef_vi.h 2009-04-07 13:58:48.000000000 +0200
@@ -0,0 +1,647 @@
+/****************************************************************************
+ * Copyright 2002-2005: Level 5 Networks Inc.
@@ -47058,7 +50301,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __EFAB_EF_VI_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netfront/falcon_event.c 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netfront/falcon_event.c 2009-04-07 13:58:48.000000000 +0200
@@ -0,0 +1,346 @@
+/****************************************************************************
+ * Copyright 2002-2005: Level 5 Networks Inc.
@@ -47407,7 +50650,7 @@ Acked-by: jbeulich@novell.com
+
+/*! \cidoxg_end */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netfront/falcon_vi.c 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netfront/falcon_vi.c 2009-04-07 13:58:48.000000000 +0200
@@ -0,0 +1,473 @@
+/****************************************************************************
+ * Copyright 2002-2005: Level 5 Networks Inc.
@@ -47883,7 +51126,7 @@ Acked-by: jbeulich@novell.com
+
+/*! \cidoxg_end */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netfront/pt_tx.c 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netfront/pt_tx.c 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,91 @@
+/****************************************************************************
+ * Copyright 2002-2005: Level 5 Networks Inc.
@@ -47977,7 +51220,7 @@ Acked-by: jbeulich@novell.com
+
+/*! \cidoxg_end */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netfront/sysdep.h 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netfront/sysdep.h 2009-04-07 13:58:48.000000000 +0200
@@ -0,0 +1,185 @@
+/****************************************************************************
+ * Copyright 2002-2005: Level 5 Networks Inc.
@@ -48165,7 +51408,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __CI_CIUL_SYSDEP_LINUX_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netfront/vi_init.c 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netfront/vi_init.c 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,183 @@
+/****************************************************************************
+ * Copyright 2002-2005: Level 5 Networks Inc.
@@ -48351,7 +51594,7 @@ Acked-by: jbeulich@novell.com
+ vm->tx_bell = (char*) io_mmap + (TX_DESC_UPD_REG_KER_OFST & 4095);
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netutil/Makefile 2008-02-26 10:54:12.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netutil/Makefile 2008-02-26 10:54:12.000000000 +0100
@@ -0,0 +1,11 @@
+EXTRA_CFLAGS += -Idrivers/xen/sfc_netutil
+EXTRA_CFLAGS += -Werror
@@ -48365,7 +51608,7 @@ Acked-by: jbeulich@novell.com
+sfc_netutil-objs := accel_cuckoo_hash.o accel_msg_iface.o accel_util.o
+
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netutil/accel_cuckoo_hash.c 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netutil/accel_cuckoo_hash.c 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,651 @@
+/****************************************************************************
+ * Solarflare driver for Xen network acceleration
@@ -49019,7 +52262,7 @@ Acked-by: jbeulich@novell.com
+EXPORT_SYMBOL_GPL(cuckoo_hash_dump);
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netutil/accel_cuckoo_hash.h 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netutil/accel_cuckoo_hash.h 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,227 @@
+/****************************************************************************
+ * Solarflare driver for Xen network acceleration
@@ -49249,7 +52492,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* NET_ACCEL_CUCKOO_HASH_H */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netutil/accel_msg_iface.c 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netutil/accel_msg_iface.c 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,301 @@
+/****************************************************************************
+ * Solarflare driver for Xen network acceleration
@@ -49553,7 +52796,7 @@ Acked-by: jbeulich@novell.com
+}
+EXPORT_SYMBOL_GPL(net_accel_msg_complete_send_notify);
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netutil/accel_msg_iface.h 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netutil/accel_msg_iface.h 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,414 @@
+/****************************************************************************
+ * Solarflare driver for Xen network acceleration
@@ -49970,7 +53213,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* NET_ACCEL_MSG_IFACE_H */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netutil/accel_shared_fifo.h 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netutil/accel_shared_fifo.h 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,127 @@
+/****************************************************************************
+ * Solarflare driver for Xen network acceleration
@@ -50100,7 +53343,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* NET_ACCEL_SHARED_FIFO_H */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netutil/accel_util.c 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netutil/accel_util.c 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,333 @@
+/****************************************************************************
+ * Solarflare driver for Xen network acceleration
@@ -50436,7 +53679,7 @@ Acked-by: jbeulich@novell.com
+
+MODULE_LICENSE("GPL");
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/sfc_netutil/accel_util.h 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netutil/accel_util.h 2008-02-20 09:32:49.000000000 +0100
@@ -0,0 +1,127 @@
+/****************************************************************************
+ * Solarflare driver for Xen network acceleration
@@ -50566,14 +53809,14 @@ Acked-by: jbeulich@novell.com
+
+#endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/tpmback/Makefile 2007-06-12 13:13:45.000000000 +0200
++++ head-2009-06-09/drivers/xen/tpmback/Makefile 2007-06-12 13:13:45.000000000 +0200
@@ -0,0 +1,4 @@
+
+obj-$(CONFIG_XEN_TPMDEV_BACKEND) += tpmbk.o
+
+tpmbk-y += tpmback.o interface.o xenbus.o
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/tpmback/common.h 2007-06-12 13:13:45.000000000 +0200
++++ head-2009-06-09/drivers/xen/tpmback/common.h 2007-06-12 13:13:45.000000000 +0200
@@ -0,0 +1,85 @@
+/******************************************************************************
+ * drivers/xen/tpmback/common.h
@@ -50661,7 +53904,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __TPMIF__BACKEND__COMMON_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/tpmback/interface.c 2008-01-21 11:15:26.000000000 +0100
++++ head-2009-06-09/drivers/xen/tpmback/interface.c 2008-01-21 11:15:26.000000000 +0100
@@ -0,0 +1,168 @@
+ /*****************************************************************************
+ * drivers/xen/tpmback/interface.c
@@ -50832,7 +54075,7 @@ Acked-by: jbeulich@novell.com
+ kmem_cache_destroy(tpmif_cachep);
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/tpmback/tpmback.c 2007-06-12 13:13:45.000000000 +0200
++++ head-2009-06-09/drivers/xen/tpmback/tpmback.c 2007-06-12 13:13:45.000000000 +0200
@@ -0,0 +1,944 @@
+/******************************************************************************
+ * drivers/xen/tpmback/tpmback.c
@@ -51779,7 +55022,7 @@ Acked-by: jbeulich@novell.com
+
+MODULE_LICENSE("Dual BSD/GPL");
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/tpmback/xenbus.c 2008-03-06 08:54:32.000000000 +0100
++++ head-2009-06-09/drivers/xen/tpmback/xenbus.c 2008-03-06 08:54:32.000000000 +0100
@@ -0,0 +1,289 @@
+/* Xenbus code for tpmif backend
+ Copyright (C) 2005 IBM Corporation
@@ -52071,14 +55314,14 @@ Acked-by: jbeulich@novell.com
+ xenbus_unregister_driver(&tpmback);
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/usbback/Makefile 2009-04-07 13:58:49.000000000 +0200
++++ head-2009-06-09/drivers/xen/usbback/Makefile 2009-04-07 13:58:49.000000000 +0200
@@ -0,0 +1,4 @@
+obj-$(CONFIG_XEN_USB_BACKEND) := usbbk.o
+
+usbbk-y := usbstub.o xenbus.o interface.o usbback.o
+
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/usbback/interface.c 2009-04-07 13:58:49.000000000 +0200
++++ head-2009-06-09/drivers/xen/usbback/interface.c 2009-04-07 13:58:49.000000000 +0200
@@ -0,0 +1,208 @@
+/*
+ * interface.c
@@ -52289,7 +55532,7 @@ Acked-by: jbeulich@novell.com
+ kfree(usbif);
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/usbback/usbback.c 2009-04-07 13:58:49.000000000 +0200
++++ head-2009-06-09/drivers/xen/usbback/usbback.c 2009-04-07 13:58:49.000000000 +0200
@@ -0,0 +1,1087 @@
+/*
+ * usbback.c
@@ -53379,7 +56622,7 @@ Acked-by: jbeulich@novell.com
+MODULE_DESCRIPTION("Xen USB backend driver (usbback)");
+MODULE_LICENSE("Dual BSD/GPL");
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/usbback/usbback.h 2009-04-07 13:58:49.000000000 +0200
++++ head-2009-06-09/drivers/xen/usbback/usbback.h 2009-04-07 13:58:49.000000000 +0200
@@ -0,0 +1,158 @@
+/*
+ * usbback.h
@@ -53540,7 +56783,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __XEN_USBBACK_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/usbback/usbstub.c 2009-04-07 13:58:49.000000000 +0200
++++ head-2009-06-09/drivers/xen/usbback/usbstub.c 2009-04-07 13:58:49.000000000 +0200
@@ -0,0 +1,447 @@
+/*
+ * usbstub.c
@@ -53990,7 +57233,7 @@ Acked-by: jbeulich@novell.com
+ usb_deregister(&usbback_usb_driver);
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/usbback/xenbus.c 2009-04-07 13:58:49.000000000 +0200
++++ head-2009-06-09/drivers/xen/usbback/xenbus.c 2009-04-07 13:58:49.000000000 +0200
@@ -0,0 +1,269 @@
+/*
+ * xenbus.c
@@ -54262,7 +57505,7 @@ Acked-by: jbeulich@novell.com
+ xenbus_unregister_driver(&usbback_driver);
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/usbfront/Makefile 2009-04-07 13:58:49.000000000 +0200
++++ head-2009-06-09/drivers/xen/usbfront/Makefile 2009-04-07 13:58:49.000000000 +0200
@@ -0,0 +1,7 @@
+obj-$(CONFIG_XEN_USB_FRONTEND) := xen-hcd.o
+
@@ -54272,7 +57515,7 @@ Acked-by: jbeulich@novell.com
+EXTRA_CFLAGS += -DXENHCD_STATS
+endif
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/usbfront/usbfront-dbg.c 2009-04-07 13:58:49.000000000 +0200
++++ head-2009-06-09/drivers/xen/usbfront/usbfront-dbg.c 2009-04-07 13:58:49.000000000 +0200
@@ -0,0 +1,99 @@
+/*
+ * usbfront-dbg.c
@@ -54374,7 +57617,7 @@ Acked-by: jbeulich@novell.com
+ class_device_remove_file(cldev, &class_device_attr_statistics);
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/usbfront/usbfront-hcd.c 2009-04-07 13:58:49.000000000 +0200
++++ head-2009-06-09/drivers/xen/usbfront/usbfront-hcd.c 2009-04-07 13:58:49.000000000 +0200
@@ -0,0 +1,279 @@
+/*
+ * usbfront-hcd.c
@@ -54656,7 +57899,7 @@ Acked-by: jbeulich@novell.com
+#endif
+};
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/usbfront/usbfront-hub.c 2009-04-07 13:58:49.000000000 +0200
++++ head-2009-06-09/drivers/xen/usbfront/usbfront-hub.c 2009-04-07 13:58:49.000000000 +0200
@@ -0,0 +1,502 @@
+/*
+ * usbfront-hub.c
@@ -55161,7 +58404,7 @@ Acked-by: jbeulich@novell.com
+ return ret;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/usbfront/usbfront-q.c 2009-04-07 13:58:49.000000000 +0200
++++ head-2009-06-09/drivers/xen/usbfront/usbfront-q.c 2009-04-07 13:58:49.000000000 +0200
@@ -0,0 +1,420 @@
+/*
+ * usbfront-q.c
@@ -55584,7 +58827,7 @@ Acked-by: jbeulich@novell.com
+ return IRQ_HANDLED;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/usbfront/usbfront.h 2009-04-07 13:58:49.000000000 +0200
++++ head-2009-06-09/drivers/xen/usbfront/usbfront.h 2009-04-07 13:58:49.000000000 +0200
@@ -0,0 +1,216 @@
+/*
+ * usbfront.h
@@ -55803,7 +59046,7 @@ Acked-by: jbeulich@novell.com
+
+#endif /* __XEN_USBFRONT_H__ */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/usbfront/xenbus.c 2009-04-07 13:58:49.000000000 +0200
++++ head-2009-06-09/drivers/xen/usbfront/xenbus.c 2009-04-07 13:58:49.000000000 +0200
@@ -0,0 +1,365 @@
+/*
+ * xenbus.c
@@ -56171,7 +59414,7 @@ Acked-by: jbeulich@novell.com
+MODULE_DESCRIPTION(DRIVER_DESC);
+MODULE_LICENSE("Dual BSD/GPL");
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/util.c 2007-07-10 09:42:30.000000000 +0200
++++ head-2009-06-09/drivers/xen/util.c 2007-07-10 09:42:30.000000000 +0200
@@ -0,0 +1,65 @@
+#include <linux/mm.h>
+#include <linux/module.h>
@@ -56239,7 +59482,7 @@ Acked-by: jbeulich@novell.com
+EXPORT_SYMBOL_GPL(free_vm_area);
+#endif /* CONFIG_X86 */
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/xenbus/xenbus_backend_client.c 2007-06-12 13:13:45.000000000 +0200
++++ head-2009-06-09/drivers/xen/xenbus/xenbus_backend_client.c 2007-06-12 13:13:45.000000000 +0200
@@ -0,0 +1,147 @@
+/******************************************************************************
+ * Backend-client-facing interface for the Xenbus driver. In other words, the
@@ -56389,8 +59632,8 @@ Acked-by: jbeulich@novell.com
+
+MODULE_LICENSE("Dual BSD/GPL");
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/xenbus/xenbus_dev.c 2008-07-21 11:00:33.000000000 +0200
-@@ -0,0 +1,408 @@
++++ head-2009-06-09/drivers/xen/xenbus/xenbus_dev.c 2009-05-29 10:25:53.000000000 +0200
+@@ -0,0 +1,460 @@
+/*
+ * xenbus_dev.c
+ *
@@ -56446,6 +59689,8 @@ Acked-by: jbeulich@novell.com
+#include <xen/platform-compat.h>
+#endif
+
++#include <xen/public/xenbus.h>
++
+struct xenbus_dev_transaction {
+ struct list_head list;
+ struct xenbus_transaction handle;
@@ -56489,6 +59734,9 @@ Acked-by: jbeulich@novell.com
+ struct read_buffer *rb;
+ int i, ret;
+
++ if (!is_xenstored_ready())
++ return -ENODEV;
++
+ mutex_lock(&u->reply_mutex);
+ while (list_empty(&u->read_buffers)) {
+ mutex_unlock(&u->reply_mutex);
@@ -56599,6 +59847,9 @@ Acked-by: jbeulich@novell.com
+ struct watch_adapter *watch, *tmp_watch;
+ int err, rc = len;
+
++ if (!is_xenstored_ready())
++ return -ENODEV;
++
+ if ((len + u->len) > sizeof(u->u.buffer)) {
+ rc = -EINVAL;
+ goto out;
@@ -56617,50 +59868,6 @@ Acked-by: jbeulich@novell.com
+ msg_type = u->u.msg.type;
+
+ switch (msg_type) {
-+ case XS_TRANSACTION_START:
-+ case XS_TRANSACTION_END:
-+ case XS_DIRECTORY:
-+ case XS_READ:
-+ case XS_GET_PERMS:
-+ case XS_RELEASE:
-+ case XS_GET_DOMAIN_PATH:
-+ case XS_WRITE:
-+ case XS_MKDIR:
-+ case XS_RM:
-+ case XS_SET_PERMS:
-+ if (msg_type == XS_TRANSACTION_START) {
-+ trans = kmalloc(sizeof(*trans), GFP_KERNEL);
-+ if (!trans) {
-+ rc = -ENOMEM;
-+ goto out;
-+ }
-+ }
-+
-+ reply = xenbus_dev_request_and_reply(&u->u.msg);
-+ if (IS_ERR(reply)) {
-+ kfree(trans);
-+ rc = PTR_ERR(reply);
-+ goto out;
-+ }
-+
-+ if (msg_type == XS_TRANSACTION_START) {
-+ trans->handle.id = simple_strtoul(reply, NULL, 0);
-+ list_add(&trans->list, &u->transactions);
-+ } else if (msg_type == XS_TRANSACTION_END) {
-+ list_for_each_entry(trans, &u->transactions, list)
-+ if (trans->handle.id == u->u.msg.tx_id)
-+ break;
-+ BUG_ON(&trans->list == &u->transactions);
-+ list_del(&trans->list);
-+ kfree(trans);
-+ }
-+ mutex_lock(&u->reply_mutex);
-+ queue_reply(u, (char *)&u->u.msg, sizeof(u->u.msg));
-+ queue_reply(u, (char *)reply, u->u.msg.len);
-+ mutex_unlock(&u->reply_mutex);
-+ kfree(reply);
-+ break;
-+
+ case XS_WATCH:
+ case XS_UNWATCH: {
+ static const char *XS_RESP = "OK";
@@ -56716,7 +59923,37 @@ Acked-by: jbeulich@novell.com
+ }
+
+ default:
-+ rc = -EINVAL;
++ if (msg_type == XS_TRANSACTION_START) {
++ trans = kmalloc(sizeof(*trans), GFP_KERNEL);
++ if (!trans) {
++ rc = -ENOMEM;
++ goto out;
++ }
++ }
++
++ reply = xenbus_dev_request_and_reply(&u->u.msg);
++ if (IS_ERR(reply)) {
++ kfree(trans);
++ rc = PTR_ERR(reply);
++ goto out;
++ }
++
++ if (msg_type == XS_TRANSACTION_START) {
++ trans->handle.id = simple_strtoul(reply, NULL, 0);
++ list_add(&trans->list, &u->transactions);
++ } else if (msg_type == XS_TRANSACTION_END) {
++ list_for_each_entry(trans, &u->transactions, list)
++ if (trans->handle.id == u->u.msg.tx_id)
++ break;
++ BUG_ON(&trans->list == &u->transactions);
++ list_del(&trans->list);
++ kfree(trans);
++ }
++ mutex_lock(&u->reply_mutex);
++ queue_reply(u, (char *)&u->u.msg, sizeof(u->u.msg));
++ queue_reply(u, (char *)reply, u->u.msg.len);
++ mutex_unlock(&u->reply_mutex);
++ kfree(reply);
+ break;
+ }
+
@@ -56777,18 +60014,76 @@ Acked-by: jbeulich@novell.com
+{
+ struct xenbus_dev_data *u = file->private_data;
+
++ if (!is_xenstored_ready())
++ return -ENODEV;
++
+ poll_wait(file, &u->read_waitq, wait);
+ if (!list_empty(&u->read_buffers))
+ return POLLIN | POLLRDNORM;
+ return 0;
+}
+
++#ifdef HAVE_UNLOCKED_IOCTL
++static long xenbus_dev_ioctl(struct file *file,
++ unsigned int cmd, unsigned long data)
++{
++ extern int xenbus_conn(domid_t remote_dom, int *grant_ref,
++ evtchn_port_t *local_port);
++ void __user *udata = (void __user *) data;
++ int ret = -ENOTTY;
++
++ if (!is_initial_xendomain())
++ return -ENODEV;
++
++
++ switch (cmd) {
++ case IOCTL_XENBUS_ALLOC: {
++ xenbus_alloc_t xa;
++ int old;
++
++ old = atomic_cmpxchg(&xenbus_xsd_state,
++ XENBUS_XSD_UNCOMMITTED,
++ XENBUS_XSD_FOREIGN_INIT);
++ if (old != XENBUS_XSD_UNCOMMITTED)
++ return -EBUSY;
++
++ if (copy_from_user(&xa, udata, sizeof(xa))) {
++ ret = -EFAULT;
++ atomic_set(&xenbus_xsd_state, XENBUS_XSD_UNCOMMITTED);
++ break;
++ }
++
++ ret = xenbus_conn(xa.dom, &xa.grant_ref, &xa.port);
++ if (ret != 0) {
++ atomic_set(&xenbus_xsd_state, XENBUS_XSD_UNCOMMITTED);
++ break;
++ }
++
++ if (copy_to_user(udata, &xa, sizeof(xa))) {
++ ret = -EFAULT;
++ atomic_set(&xenbus_xsd_state, XENBUS_XSD_UNCOMMITTED);
++ break;
++ }
++ }
++ break;
++
++ default:
++ break;
++ }
++
++ return ret;
++}
++#endif
++
+static const struct file_operations xenbus_dev_file_ops = {
+ .read = xenbus_dev_read,
+ .write = xenbus_dev_write,
+ .open = xenbus_dev_open,
+ .release = xenbus_dev_release,
+ .poll = xenbus_dev_poll,
++#ifdef HAVE_UNLOCKED_IOCTL
++ .unlocked_ioctl = xenbus_dev_ioctl
++#endif
+};
+
+int xenbus_dev_init(void)
@@ -56800,7 +60095,7 @@ Acked-by: jbeulich@novell.com
+ return 0;
+}
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/xenbus/xenbus_probe_backend.c 2008-01-21 11:15:26.000000000 +0100
++++ head-2009-06-09/drivers/xen/xenbus/xenbus_probe_backend.c 2008-01-21 11:15:26.000000000 +0100
@@ -0,0 +1,292 @@
+/******************************************************************************
+ * Talks to Xen Store to figure out what devices we have (backend half).
@@ -57095,7 +60390,7 @@ Acked-by: jbeulich@novell.com
+}
+EXPORT_SYMBOL_GPL(xenbus_for_each_backend);
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/drivers/xen/xenoprof/xenoprofile.c 2008-09-15 13:40:15.000000000 +0200
++++ head-2009-06-09/drivers/xen/xenoprof/xenoprofile.c 2008-09-15 13:40:15.000000000 +0200
@@ -0,0 +1,545 @@
+/**
+ * @file xenoprofile.c
diff --git a/patches.xen/xen3-auto-xen-kconfig.diff b/patches.xen/xen3-auto-xen-kconfig.diff
index cbd63dd642..057349ec14 100644
--- a/patches.xen/xen3-auto-xen-kconfig.diff
+++ b/patches.xen/xen3-auto-xen-kconfig.diff
@@ -1,10 +1,10 @@
Subject: xen3 xen-kconfig
-From: http://xenbits.xensource.com/linux-2.6.18-xen.hg (tip 873:57acc535fd37)
+From: http://xenbits.xensource.com/linux-2.6.18-xen.hg (tip 898:ca12928cdafe)
Patch-mainline: obsolete
Acked-by: jbeulich@novell.com
---- head-2009-05-19.orig/arch/x86/Kconfig 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/arch/x86/Kconfig 2009-05-19 09:43:59.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/Kconfig 2009-06-09 15:21:20.000000000 +0200
++++ head-2009-06-09/arch/x86/Kconfig 2009-05-29 11:25:52.000000000 +0200
@@ -54,6 +54,7 @@ config ARCH_DEFCONFIG
config GENERIC_TIME
@@ -70,7 +70,7 @@ Acked-by: jbeulich@novell.com
if X86_64
config X86_EXTENDED_PLATFORM
bool "Support for extended (non-PC) x86 platforms"
-@@ -535,6 +565,7 @@ source "arch/x86/Kconfig.cpu"
+@@ -548,6 +578,7 @@ source "arch/x86/Kconfig.cpu"
config HPET_TIMER
def_bool X86_64
prompt "HPET Timer Support" if X86_32
@@ -78,7 +78,7 @@ Acked-by: jbeulich@novell.com
---help---
Use the IA-PC HPET (High Precision Event Timer) to manage
time in preference to the PIT and RTC, if a HPET is
-@@ -571,7 +602,7 @@ config GART_IOMMU
+@@ -584,7 +615,7 @@ config GART_IOMMU
default y
select SWIOTLB
select AGP
@@ -87,7 +87,7 @@ Acked-by: jbeulich@novell.com
---help---
Support for full DMA access of devices with 32bit memory access only
on systems with more than 3GB. This is usually needed for USB,
-@@ -586,7 +617,7 @@ config GART_IOMMU
+@@ -599,7 +630,7 @@ config GART_IOMMU
config CALGARY_IOMMU
bool "IBM Calgary IOMMU support"
select SWIOTLB
@@ -96,7 +96,7 @@ Acked-by: jbeulich@novell.com
---help---
Support for hardware IOMMUs in IBM's xSeries x366 and x460
systems. Needed to run systems with more than 3GB of memory
-@@ -670,6 +701,7 @@ config NR_CPUS
+@@ -683,6 +714,7 @@ config NR_CPUS
default "1" if !SMP
default "4096" if MAXSMP
default "32" if SMP && (X86_NUMAQ || X86_SUMMIT || X86_BIGSMP || X86_ES7000)
@@ -104,7 +104,7 @@ Acked-by: jbeulich@novell.com
default "8" if SMP
---help---
This allows you to specify the maximum number of CPUs which this
-@@ -701,7 +733,7 @@ source "kernel/Kconfig.preempt"
+@@ -714,7 +746,7 @@ source "kernel/Kconfig.preempt"
config X86_UP_APIC
bool "Local APIC support on uniprocessors"
@@ -113,7 +113,7 @@ Acked-by: jbeulich@novell.com
---help---
A local APIC (Advanced Programmable Interrupt Controller) is an
integrated interrupt controller in the CPU. If you have a single-CPU
-@@ -727,15 +759,22 @@ config X86_UP_IOAPIC
+@@ -740,15 +772,22 @@ config X86_UP_IOAPIC
config X86_LOCAL_APIC
def_bool y
depends on X86_64 || SMP || X86_32_NON_STANDARD || X86_UP_APIC
@@ -136,7 +136,7 @@ Acked-by: jbeulich@novell.com
config X86_REROUTE_FOR_BROKEN_BOOT_IRQS
bool "Reroute for broken boot IRQs"
default n
-@@ -762,6 +801,7 @@ config X86_REROUTE_FOR_BROKEN_BOOT_IRQS
+@@ -775,6 +814,7 @@ config X86_REROUTE_FOR_BROKEN_BOOT_IRQS
config X86_MCE
bool "Machine Check Exception"
@@ -144,7 +144,7 @@ Acked-by: jbeulich@novell.com
---help---
Machine Check Exception support allows the processor to notify the
kernel if it detects a problem (e.g. overheating, component failure).
-@@ -865,7 +905,7 @@ config I8K
+@@ -878,7 +918,7 @@ config I8K
config X86_REBOOTFIXUPS
bool "Enable X86 board specific fixups for reboot"
@@ -153,7 +153,7 @@ Acked-by: jbeulich@novell.com
---help---
This enables chipset and/or board specific fixups to be done
in order to get reboot to work correctly. This is only needed on
-@@ -882,6 +922,7 @@ config X86_REBOOTFIXUPS
+@@ -895,6 +935,7 @@ config X86_REBOOTFIXUPS
config MICROCODE
tristate "/dev/cpu/microcode - microcode support"
@@ -161,7 +161,7 @@ Acked-by: jbeulich@novell.com
select FW_LOADER
---help---
If you say Y here, you will be able to update the microcode on
-@@ -1078,7 +1119,7 @@ config DIRECT_GBPAGES
+@@ -1091,7 +1132,7 @@ config DIRECT_GBPAGES
# Common NUMA Features
config NUMA
bool "Numa Memory Allocation and Scheduler Support"
@@ -170,7 +170,7 @@ Acked-by: jbeulich@novell.com
depends on X86_64 || (X86_32 && HIGHMEM64G && (X86_NUMAQ || X86_BIGSMP || X86_SUMMIT && ACPI) && EXPERIMENTAL)
default y if (X86_NUMAQ || X86_SUMMIT || X86_BIGSMP)
---help---
-@@ -1183,6 +1224,7 @@ config ARCH_SPARSEMEM_DEFAULT
+@@ -1196,6 +1237,7 @@ config ARCH_SPARSEMEM_DEFAULT
config ARCH_SPARSEMEM_ENABLE
def_bool y
depends on X86_64 || NUMA || (EXPERIMENTAL && X86_32) || X86_32_NON_STANDARD
@@ -178,7 +178,7 @@ Acked-by: jbeulich@novell.com
select SPARSEMEM_STATIC if X86_32
select SPARSEMEM_VMEMMAP_ENABLE if X86_64
-@@ -1258,6 +1300,7 @@ config X86_RESERVE_LOW_64K
+@@ -1271,6 +1313,7 @@ config X86_RESERVE_LOW_64K
config MATH_EMULATION
bool
prompt "Math emulation" if X86_32
@@ -186,7 +186,7 @@ Acked-by: jbeulich@novell.com
---help---
Linux can emulate a math coprocessor (used for floating point
operations) if you don't have one. 486DX and Pentium processors have
-@@ -1283,6 +1326,7 @@ config MATH_EMULATION
+@@ -1296,6 +1339,7 @@ config MATH_EMULATION
config MTRR
bool "MTRR (Memory Type Range Register) support"
@@ -194,7 +194,7 @@ Acked-by: jbeulich@novell.com
---help---
On Intel P6 family processors (Pentium Pro, Pentium II and later)
the Memory Type Range Registers (MTRRs) may be used to control
-@@ -1363,7 +1407,7 @@ config X86_PAT
+@@ -1376,7 +1420,7 @@ config X86_PAT
config EFI
bool "EFI runtime service support"
@@ -203,7 +203,7 @@ Acked-by: jbeulich@novell.com
---help---
This enables the kernel to use EFI runtime services that are
available (such as the EFI variable services).
-@@ -1427,6 +1471,7 @@ source kernel/Kconfig.hz
+@@ -1440,6 +1484,7 @@ source kernel/Kconfig.hz
config KEXEC
bool "kexec system call"
@@ -211,7 +211,7 @@ Acked-by: jbeulich@novell.com
---help---
kexec is a system call that implements the ability to shutdown your
current kernel, and to start another kernel. It is like a reboot
-@@ -1444,6 +1489,7 @@ config KEXEC
+@@ -1457,6 +1502,7 @@ config KEXEC
config CRASH_DUMP
bool "kernel crash dumps"
depends on X86_64 || (X86_32 && HIGHMEM)
@@ -219,7 +219,7 @@ Acked-by: jbeulich@novell.com
---help---
Generate crash dump after being started by kexec.
This should be normally only set in special crash dump kernels
-@@ -1562,6 +1608,7 @@ config COMPAT_VDSO
+@@ -1575,6 +1621,7 @@ config COMPAT_VDSO
def_bool y
prompt "Compat VDSO support"
depends on X86_32 || IA32_EMULATION
@@ -227,7 +227,7 @@ Acked-by: jbeulich@novell.com
---help---
Map the 32-bit VDSO to the predictable old-style address too.
---help---
-@@ -1631,6 +1678,7 @@ config HAVE_ARCH_EARLY_PFN_TO_NID
+@@ -1644,6 +1691,7 @@ config HAVE_ARCH_EARLY_PFN_TO_NID
depends on NUMA
menu "Power management and ACPI options"
@@ -235,7 +235,7 @@ Acked-by: jbeulich@novell.com
config ARCH_HIBERNATION_HEADER
def_bool y
-@@ -1647,7 +1695,7 @@ config X86_APM_BOOT
+@@ -1660,7 +1708,7 @@ config X86_APM_BOOT
menuconfig APM
tristate "APM (Advanced Power Management) BIOS support"
@@ -244,7 +244,7 @@ Acked-by: jbeulich@novell.com
---help---
APM is a BIOS specification for saving power using several different
techniques. This is mostly useful for battery powered laptops with
-@@ -1808,6 +1856,7 @@ choice
+@@ -1821,6 +1869,7 @@ choice
config PCI_GOBIOS
bool "BIOS"
@@ -252,7 +252,7 @@ Acked-by: jbeulich@novell.com
config PCI_GOMMCONFIG
bool "MMConfig"
-@@ -1819,6 +1868,13 @@ config PCI_GOOLPC
+@@ -1832,6 +1881,13 @@ config PCI_GOOLPC
bool "OLPC"
depends on OLPC
@@ -266,7 +266,7 @@ Acked-by: jbeulich@novell.com
config PCI_GOANY
bool "Any"
-@@ -1826,7 +1882,7 @@ endchoice
+@@ -1839,7 +1895,7 @@ endchoice
config PCI_BIOS
def_bool y
@@ -275,7 +275,7 @@ Acked-by: jbeulich@novell.com
# x86-64 doesn't support PCI BIOS access from long mode so always go direct.
config PCI_DIRECT
-@@ -1849,6 +1905,22 @@ config PCI_MMCONFIG
+@@ -1862,6 +1918,22 @@ config PCI_MMCONFIG
bool "Support mmconfig PCI config space access"
depends on X86_64 && PCI && ACPI
@@ -298,7 +298,7 @@ Acked-by: jbeulich@novell.com
config DMAR
bool "Support for DMA Remapping Devices (EXPERIMENTAL)"
depends on PCI_MSI && ACPI && EXPERIMENTAL
-@@ -1910,6 +1982,7 @@ if X86_32
+@@ -1923,6 +1995,7 @@ if X86_32
config ISA
bool "ISA support"
@@ -306,7 +306,7 @@ Acked-by: jbeulich@novell.com
---help---
Find out whether you have ISA slots on your motherboard. ISA is the
name of a bus system, i.e. the way the CPU talks to the other stuff
-@@ -1937,6 +2010,7 @@ source "drivers/eisa/Kconfig"
+@@ -1950,6 +2023,7 @@ source "drivers/eisa/Kconfig"
config MCA
bool "MCA support"
@@ -314,15 +314,15 @@ Acked-by: jbeulich@novell.com
---help---
MicroChannel Architecture is found in some IBM PS/2 machines and
laptops. It is a bus system similar to PCI or ISA. See
-@@ -2050,4 +2124,6 @@ source "crypto/Kconfig"
+@@ -2063,4 +2137,6 @@ source "crypto/Kconfig"
source "arch/x86/kvm/Kconfig"
+source "drivers/xen/Kconfig"
+
source "lib/Kconfig"
---- head-2009-05-19.orig/arch/x86/Kconfig.cpu 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/arch/x86/Kconfig.cpu 2009-05-19 09:43:59.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/Kconfig.cpu 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/arch/x86/Kconfig.cpu 2009-05-29 11:25:52.000000000 +0200
@@ -331,7 +331,7 @@ config X86_PPRO_FENCE
config X86_F00F_BUG
@@ -340,8 +340,8 @@ Acked-by: jbeulich@novell.com
config X86_CMPXCHG64
def_bool y
---- head-2009-05-19.orig/arch/x86/Kconfig.debug 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/arch/x86/Kconfig.debug 2009-05-19 09:43:59.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/Kconfig.debug 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/arch/x86/Kconfig.debug 2009-05-29 11:25:52.000000000 +0200
@@ -136,7 +136,7 @@ config 4KSTACKS
config DOUBLEFAULT
default y
@@ -351,8 +351,8 @@ Acked-by: jbeulich@novell.com
---help---
This option allows trapping of rare doublefault exceptions that
would otherwise cause a system to silently reboot. Disabling this
---- head-2009-05-19.orig/drivers/acpi/Kconfig 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/acpi/Kconfig 2009-05-19 09:43:59.000000000 +0200
+--- head-2009-06-09.orig/drivers/acpi/Kconfig 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/drivers/acpi/Kconfig 2009-05-29 11:25:52.000000000 +0200
@@ -279,6 +279,7 @@ config ACPI_PCI_SLOT
config X86_PM_TIMER
bool "Power Management Timer Support" if EMBEDDED
@@ -375,8 +375,8 @@ Acked-by: jbeulich@novell.com
+ depends on (X86 || IA64) && XEN
+ default y
endif # ACPI
---- head-2009-05-19.orig/drivers/char/Kconfig 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/char/Kconfig 2009-05-19 09:43:59.000000000 +0200
+--- head-2009-06-09.orig/drivers/char/Kconfig 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/drivers/char/Kconfig 2009-05-29 11:25:52.000000000 +0200
@@ -1043,7 +1043,7 @@ config MAX_RAW_DEVS
config HPET
bool "HPET - High Precision Event Timer" if (X86 || IA64)
@@ -386,8 +386,8 @@ Acked-by: jbeulich@novell.com
help
If you say Y here, you will have a miscdevice named "/dev/hpet/". Each
open selects one of the timers supported by the HPET. The timers are
---- head-2009-05-19.orig/drivers/char/tpm/Kconfig 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/char/tpm/Kconfig 2009-05-19 09:43:59.000000000 +0200
+--- head-2009-06-09.orig/drivers/char/tpm/Kconfig 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/drivers/char/tpm/Kconfig 2009-05-29 11:25:52.000000000 +0200
@@ -58,4 +58,13 @@ config TCG_INFINEON
Further information on this driver and the supported hardware
can be found at http://www.prosec.rub.de/tpm
@@ -402,8 +402,8 @@ Acked-by: jbeulich@novell.com
+ will be called tpm_xenu.
+
endif # TCG_TPM
---- head-2009-05-19.orig/drivers/cpufreq/Kconfig 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/cpufreq/Kconfig 2009-05-19 09:43:59.000000000 +0200
+--- head-2009-06-09.orig/drivers/cpufreq/Kconfig 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/drivers/cpufreq/Kconfig 2009-05-29 11:25:52.000000000 +0200
@@ -1,5 +1,6 @@
config CPU_FREQ
bool "CPU Frequency scaling"
@@ -411,8 +411,8 @@ Acked-by: jbeulich@novell.com
help
CPU Frequency scaling allows you to change the clock speed of
CPUs on the fly. This is a nice method to save power, because
---- head-2009-05-19.orig/drivers/serial/Kconfig 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/serial/Kconfig 2009-05-19 09:43:59.000000000 +0200
+--- head-2009-06-09.orig/drivers/serial/Kconfig 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/drivers/serial/Kconfig 2009-05-29 11:25:52.000000000 +0200
@@ -9,6 +9,7 @@ menu "Serial drivers"
# The new 8250/16550 serial drivers
config SERIAL_8250
@@ -421,9 +421,9 @@ Acked-by: jbeulich@novell.com
select SERIAL_CORE
---help---
This selects whether you want to include the driver for the standard
---- head-2009-05-19.orig/drivers/xen/Kconfig 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/xen/Kconfig 2009-05-19 09:43:59.000000000 +0200
-@@ -1,6 +1,330 @@
+--- head-2009-06-09.orig/drivers/xen/Kconfig 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/drivers/xen/Kconfig 2009-06-09 15:01:37.000000000 +0200
+@@ -1,6 +1,347 @@
+#
+# This Kconfig describe xen options
+#
@@ -483,12 +483,29 @@ Acked-by: jbeulich@novell.com
+ default XEN_BACKEND
+ help
+ The block tap driver is an alternative to the block back driver
-+ and allows VM block requests to be redirected to userspace through
-+ a device interface. The tap allows user-space development of
-+ high-performance block backends, where disk images may be implemented
-+ as files, in memory, or on other hosts across the network. This
++ and allows VM block requests to be redirected to userspace through
++ a device interface. The tap allows user-space development of
++ high-performance block backends, where disk images may be implemented
++ as files, in memory, or on other hosts across the network. This
+ driver can safely coexist with the existing blockback driver.
+
++config XEN_BLKDEV_TAP2
++ tristate "Block-device tap backend driver 2"
++ depends on XEN_BACKEND
++ default XEN_BACKEND
++ help
++ The block tap driver is an alternative to the block back driver
++ and allows VM block requests to be redirected to userspace through
++ a device interface. The tap allows user-space development of
++ high-performance block backends, where disk images may be implemented
++ as files, in memory, or on other hosts across the network. This
++ driver can safely coexist with the existing blockback driver.
++
++config XEN_BLKBACK_PAGEMAP
++ tristate
++ depends on XEN_BLKDEV_BACKEND != n && XEN_BLKDEV_TAP2 != n
++ default XEN_BLKDEV_BACKEND || XEN_BLKDEV_TAP2
++
+config XEN_NETDEV_BACKEND
+ tristate "Network-device backend driver"
+ depends on XEN_BACKEND && NET
@@ -756,7 +773,7 @@ Acked-by: jbeulich@novell.com
default y
help
The balloon driver allows the Xen domain to request more memory from
-@@ -8,14 +332,16 @@ config XEN_BALLOON
+@@ -8,14 +349,16 @@ config XEN_BALLOON
return unneeded memory to the system.
config XEN_SCRUB_PAGES
@@ -779,8 +796,8 @@ Acked-by: jbeulich@novell.com
If in doubt, say yes.
config XENFS
---- head-2009-05-19.orig/fs/Kconfig 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/fs/Kconfig 2009-05-19 09:43:59.000000000 +0200
+--- head-2009-06-09.orig/fs/Kconfig 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/fs/Kconfig 2009-05-29 11:25:52.000000000 +0200
@@ -148,6 +148,7 @@ config HUGETLBFS
bool "HugeTLB file system support"
depends on X86 || IA64 || PPC64 || SPARC64 || (SUPERH && MMU) || \
@@ -789,8 +806,8 @@ Acked-by: jbeulich@novell.com
help
hugetlbfs is a filesystem backing for HugeTLB pages, based on
ramfs. For architectures that support it, say Y here and read
---- head-2009-05-19.orig/kernel/Kconfig.preempt 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/kernel/Kconfig.preempt 2009-05-19 09:43:59.000000000 +0200
+--- head-2009-06-09.orig/kernel/Kconfig.preempt 2009-06-09 15:21:06.000000000 +0200
++++ head-2009-06-09/kernel/Kconfig.preempt 2009-05-29 11:25:52.000000000 +0200
@@ -35,6 +35,7 @@ config PREEMPT_VOLUNTARY
config PREEMPT
diff --git a/patches.xen/xen3-fixup-common b/patches.xen/xen3-fixup-common
index 44e3ea0683..a7b2085784 100644
--- a/patches.xen/xen3-fixup-common
+++ b/patches.xen/xen3-fixup-common
@@ -2,8 +2,8 @@ Subject: Fix xen build.
From: jbeulich@novell.com
Patch-mainline: obsolete
---- head-2009-05-04.orig/drivers/acpi/acpica/hwsleep.c 2009-05-04 10:39:16.000000000 +0200
-+++ head-2009-05-04/drivers/acpi/acpica/hwsleep.c 2009-05-04 11:04:38.000000000 +0200
+--- head-2009-06-09.orig/drivers/acpi/acpica/hwsleep.c 2009-06-09 15:22:27.000000000 +0200
++++ head-2009-06-09/drivers/acpi/acpica/hwsleep.c 2009-06-09 15:29:19.000000000 +0200
@@ -416,6 +416,7 @@ ACPI_EXPORT_SYMBOL(acpi_enter_sleep_stat
* THIS FUNCTION MUST BE CALLED WITH INTERRUPTS DISABLED
*
@@ -20,8 +20,8 @@ Patch-mainline: obsolete
/*******************************************************************************
*
---- head-2009-05-04.orig/drivers/base/cpu.c 2009-04-28 18:52:15.000000000 +0200
-+++ head-2009-05-04/drivers/base/cpu.c 2009-05-04 11:04:38.000000000 +0200
+--- head-2009-06-09.orig/drivers/base/cpu.c 2009-06-09 15:28:48.000000000 +0200
++++ head-2009-06-09/drivers/base/cpu.c 2009-06-09 15:29:19.000000000 +0200
@@ -78,7 +78,7 @@ static inline void register_cpu_control(
}
#endif /* CONFIG_HOTPLUG_CPU */
@@ -40,8 +40,8 @@ Patch-mainline: obsolete
if (!error)
error = sysdev_create_file(&cpu->sysdev, &attr_crash_notes);
#endif
---- head-2009-05-04.orig/drivers/ide/ide-lib.c 2009-05-04 10:39:16.000000000 +0200
-+++ head-2009-05-04/drivers/ide/ide-lib.c 2009-05-04 11:04:38.000000000 +0200
+--- head-2009-06-09.orig/drivers/ide/ide-lib.c 2009-06-09 15:22:27.000000000 +0200
++++ head-2009-06-09/drivers/ide/ide-lib.c 2009-06-09 15:29:19.000000000 +0200
@@ -18,6 +18,16 @@ void ide_toggle_bounce(ide_drive_t *driv
{
u64 addr = BLK_BOUNCE_HIGH; /* dma64_addr_t */
@@ -67,8 +67,8 @@ Patch-mainline: obsolete
if (drive->queue)
blk_queue_bounce_limit(drive->queue, addr);
---- head-2009-05-04.orig/drivers/oprofile/buffer_sync.c 2009-05-04 10:39:16.000000000 +0200
-+++ head-2009-05-04/drivers/oprofile/buffer_sync.c 2009-05-04 11:04:38.000000000 +0200
+--- head-2009-06-09.orig/drivers/oprofile/buffer_sync.c 2009-06-09 15:22:27.000000000 +0200
++++ head-2009-06-09/drivers/oprofile/buffer_sync.c 2009-06-09 15:29:19.000000000 +0200
@@ -46,7 +46,9 @@ static cpumask_var_t marked_cpus;
static DEFINE_SPINLOCK(task_mortuary);
static void process_task_mortuary(void);
@@ -170,8 +170,8 @@ Patch-mainline: obsolete
mark_done(cpu);
---- head-2009-05-04.orig/drivers/oprofile/cpu_buffer.c 2009-05-04 10:39:16.000000000 +0200
-+++ head-2009-05-04/drivers/oprofile/cpu_buffer.c 2009-05-04 11:04:38.000000000 +0200
+--- head-2009-06-09.orig/drivers/oprofile/cpu_buffer.c 2009-06-09 15:22:27.000000000 +0200
++++ head-2009-06-09/drivers/oprofile/cpu_buffer.c 2009-06-09 15:29:19.000000000 +0200
@@ -59,7 +59,11 @@ static void wq_sync_buffer(struct work_s
#define DEFAULT_TIMER_EXPIRE (HZ / 10)
static int work_enabled;
@@ -184,7 +184,7 @@ Patch-mainline: obsolete
unsigned long oprofile_get_cpu_buffer_size(void)
{
-@@ -445,6 +449,7 @@ fail:
+@@ -449,6 +453,7 @@ fail:
return;
}
@@ -192,7 +192,7 @@ Patch-mainline: obsolete
int oprofile_add_domain_switch(int32_t domain_id)
{
struct oprofile_cpu_buffer * cpu_buf = &cpu_buffer[smp_processor_id()];
-@@ -463,6 +468,7 @@ int oprofile_add_domain_switch(int32_t d
+@@ -467,6 +472,7 @@ int oprofile_add_domain_switch(int32_t d
return 1;
}
@@ -200,8 +200,8 @@ Patch-mainline: obsolete
/*
* This serves to avoid cpu buffer overflow, and makes sure
---- head-2009-05-04.orig/drivers/oprofile/oprof.c 2009-05-04 10:39:16.000000000 +0200
-+++ head-2009-05-04/drivers/oprofile/oprof.c 2009-05-04 11:04:38.000000000 +0200
+--- head-2009-06-09.orig/drivers/oprofile/oprof.c 2009-06-09 15:22:27.000000000 +0200
++++ head-2009-06-09/drivers/oprofile/oprof.c 2009-06-09 15:29:19.000000000 +0200
@@ -37,6 +37,7 @@ static DEFINE_MUTEX(start_mutex);
*/
static int timer = 0;
@@ -218,8 +218,8 @@ Patch-mainline: obsolete
int oprofile_setup(void)
{
---- head-2009-05-04.orig/drivers/oprofile/oprofile_files.c 2009-05-04 10:39:16.000000000 +0200
-+++ head-2009-05-04/drivers/oprofile/oprofile_files.c 2009-05-04 11:04:38.000000000 +0200
+--- head-2009-06-09.orig/drivers/oprofile/oprofile_files.c 2009-06-09 15:22:27.000000000 +0200
++++ head-2009-06-09/drivers/oprofile/oprofile_files.c 2009-06-09 15:29:19.000000000 +0200
@@ -129,6 +129,8 @@ static const struct file_operations dump
.write = dump_write,
};
@@ -229,7 +229,7 @@ Patch-mainline: obsolete
#define TMPBUFSIZE 512
static unsigned int adomains = 0;
-@@ -318,6 +320,8 @@ static struct file_operations passive_do
+@@ -318,6 +320,8 @@ static const struct file_operations pass
.write = pdomain_write,
};
@@ -249,9 +249,22 @@ Patch-mainline: obsolete
oprofilefs_create_file(sb, root, "buffer", &event_buffer_fops);
oprofilefs_create_ulong(sb, root, "buffer_size", &oprofile_buffer_size);
oprofilefs_create_ulong(sb, root, "buffer_watershed", &oprofile_buffer_watershed);
---- head-2009-05-04.orig/include/linux/mm.h 2009-05-04 10:39:16.000000000 +0200
-+++ head-2009-05-04/include/linux/mm.h 2009-05-04 11:04:38.000000000 +0200
-@@ -202,10 +202,12 @@ struct vm_operations_struct {
+--- head-2009-06-09.orig/drivers/pci/iov.c 2009-06-09 15:22:27.000000000 +0200
++++ head-2009-06-09/drivers/pci/iov.c 2009-06-09 15:29:19.000000000 +0200
+@@ -487,8 +487,10 @@ found:
+ iov->self = dev;
+ pci_read_config_dword(dev, pos + PCI_SRIOV_CAP, &iov->cap);
+ pci_read_config_byte(dev, pos + PCI_SRIOV_FUNC_LINK, &iov->link);
++#ifdef CONFIG_XEN /* should probably also be used for native */
+ if (!dev->bus->number) /* Root Complex Integrated Endpoint */
+ iov->link = PCI_DEVFN(PCI_SLOT(dev->devfn), iov->link);
++#endif
+
+ if (pdev)
+ iov->dev = pci_dev_get(pdev);
+--- head-2009-06-09.orig/include/linux/mm.h 2009-06-09 15:22:27.000000000 +0200
++++ head-2009-06-09/include/linux/mm.h 2009-06-09 15:29:19.000000000 +0200
+@@ -205,6 +205,7 @@ struct vm_operations_struct {
int (*access)(struct vm_area_struct *vma, unsigned long addr,
void *buf, int len, int write);
@@ -259,13 +272,16 @@ Patch-mainline: obsolete
/* Area-specific function for clearing the PTE at @ptep. Returns the
* original value of @ptep. */
pte_t (*zap_pte)(struct vm_area_struct *vma,
- unsigned long addr, pte_t *ptep, int is_fullmm);
+@@ -212,6 +213,7 @@ struct vm_operations_struct {
+
+ /* called before close() to indicate no more pages should be mapped */
+ void (*unmap)(struct vm_area_struct *area);
+#endif
+
#ifdef CONFIG_NUMA
/*
- * set_policy() op must add a reference to any non-NULL @new mempolicy
---- head-2009-05-04.orig/include/linux/oprofile.h 2009-05-04 10:39:16.000000000 +0200
-+++ head-2009-05-04/include/linux/oprofile.h 2009-05-04 11:04:38.000000000 +0200
+--- head-2009-06-09.orig/include/linux/oprofile.h 2009-06-09 15:22:27.000000000 +0200
++++ head-2009-06-09/include/linux/oprofile.h 2009-06-09 15:29:19.000000000 +0200
@@ -16,8 +16,9 @@
#include <linux/types.h>
#include <linux/spinlock.h>
@@ -291,8 +307,8 @@ Patch-mainline: obsolete
/* Do any necessary interrupt setup. Optional. */
int (*setup)(void);
/* Do any necessary interrupt shutdown. Optional. */
---- head-2009-05-04.orig/kernel/kexec.c 2009-05-04 10:39:16.000000000 +0200
-+++ head-2009-05-04/kernel/kexec.c 2009-05-04 11:04:38.000000000 +0200
+--- head-2009-06-09.orig/kernel/kexec.c 2009-06-09 15:22:27.000000000 +0200
++++ head-2009-06-09/kernel/kexec.c 2009-06-09 15:29:19.000000000 +0200
@@ -45,8 +45,10 @@
#include <linux/kdb.h>
#endif
@@ -336,8 +352,8 @@ Patch-mainline: obsolete
#ifdef CONFIG_SYSCTL
register_sysctl_table(kexec_sys_table);
#endif
---- head-2009-05-04.orig/mm/memory.c 2009-05-04 10:39:16.000000000 +0200
-+++ head-2009-05-04/mm/memory.c 2009-05-04 11:04:38.000000000 +0200
+--- head-2009-06-09.orig/mm/memory.c 2009-06-09 15:22:27.000000000 +0200
++++ head-2009-06-09/mm/memory.c 2009-06-09 15:29:19.000000000 +0200
@@ -811,10 +811,12 @@ static unsigned long zap_pte_range(struc
page->index > details->last_index))
continue;
@@ -351,3 +367,27 @@ Patch-mainline: obsolete
ptent = ptep_get_and_clear_full(mm, addr, pte,
tlb->fullmm);
tlb_remove_tlb_entry(tlb, pte, addr);
+--- head-2009-06-09.orig/mm/mmap.c 2009-06-09 15:22:27.000000000 +0200
++++ head-2009-06-09/mm/mmap.c 2009-06-09 15:29:19.000000000 +0200
+@@ -1841,8 +1841,10 @@ static void unmap_region(struct mm_struc
+
+ static inline void unmap_vma(struct vm_area_struct *vma)
+ {
++#ifdef CONFIG_XEN
+ if (unlikely(vma->vm_ops && vma->vm_ops->unmap))
+ vma->vm_ops->unmap(vma);
++#endif
+ }
+
+ /*
+@@ -2161,8 +2163,10 @@ void exit_mmap(struct mm_struct *mm)
+
+ arch_exit_mmap(mm);
+
++#ifdef CONFIG_XEN
+ for (vma = mm->mmap; vma; vma = vma->vm_next)
+ unmap_vma(vma);
++#endif
+
+ vma = mm->mmap;
+ if (!vma) /* Can happen if dup_mmap() received an OOM */
diff --git a/patches.xen/xen3-fixup-kconfig b/patches.xen/xen3-fixup-kconfig
index c97249ae0c..8e7a621b89 100644
--- a/patches.xen/xen3-fixup-kconfig
+++ b/patches.xen/xen3-fixup-kconfig
@@ -2,8 +2,8 @@ Subject: Fix xen configuration.
From: jbeulich@novell.com
Patch-mainline: obsolete
---- head-2009-05-04.orig/arch/x86/Kconfig 2009-05-04 10:39:15.000000000 +0200
-+++ head-2009-05-04/arch/x86/Kconfig 2009-05-04 11:04:33.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/Kconfig 2009-05-29 11:25:52.000000000 +0200
++++ head-2009-06-09/arch/x86/Kconfig 2009-06-09 15:29:14.000000000 +0200
@@ -150,6 +150,7 @@ config HAVE_CPUMASK_OF_CPU_MAP
config ARCH_HIBERNATION_POSSIBLE
@@ -12,17 +12,8 @@ Patch-mainline: obsolete
config ARCH_SUSPEND_POSSIBLE
def_bool y
-@@ -1097,7 +1098,7 @@ config HIGHMEM
-
- config X86_PAE
- bool "PAE (Physical Address Extension) Support"
-- depends on X86_32 && !HIGHMEM4G
-+ depends on X86_32 && (!HIGHMEM4G || X86_XEN)
- ---help---
- PAE is required for NX support, and furthermore enables
- larger swapspace support for non-overcommit purposes. It
---- head-2009-05-04.orig/arch/x86/Kconfig.debug 2009-05-04 10:39:15.000000000 +0200
-+++ head-2009-05-04/arch/x86/Kconfig.debug 2009-05-04 11:04:33.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/Kconfig.debug 2009-05-29 11:25:52.000000000 +0200
++++ head-2009-06-09/arch/x86/Kconfig.debug 2009-06-09 15:29:14.000000000 +0200
@@ -273,7 +273,7 @@ config OPTIMIZE_INLINING
config KDB
@@ -32,15 +23,9 @@ Patch-mainline: obsolete
select KALLSYMS
select KALLSYMS_ALL
help
---- head-2009-05-04.orig/drivers/xen/Kconfig 2009-05-04 10:39:15.000000000 +0200
-+++ head-2009-05-04/drivers/xen/Kconfig 2009-05-04 11:04:33.000000000 +0200
-@@ -16,12 +16,14 @@ menu "XEN"
-
- config XEN_PRIVILEGED_GUEST
- bool "Privileged Guest (domain 0)"
-- select PCI_REASSIGN if PCI
- help
- Support for privileged operation (domain 0)
+--- head-2009-06-09.orig/drivers/xen/Kconfig 2009-06-09 15:01:37.000000000 +0200
++++ head-2009-06-09/drivers/xen/Kconfig 2009-06-09 15:29:14.000000000 +0200
+@@ -22,6 +22,9 @@ config XEN_PRIVILEGED_GUEST
config XEN_UNPRIVILEGED_GUEST
def_bool !XEN_PRIVILEGED_GUEST
@@ -50,18 +35,16 @@ Patch-mainline: obsolete
config XEN_PRIVCMD
def_bool y
-@@ -99,8 +101,9 @@ config XEN_NETDEV_LOOPBACK
+@@ -116,7 +119,7 @@ config XEN_NETDEV_LOOPBACK
config XEN_PCIDEV_BACKEND
tristate "PCI-device backend driver"
- depends on PCI && XEN_BACKEND
+ depends on PCI && XEN_PRIVILEGED_GUEST && XEN_BACKEND
default XEN_BACKEND
-+ select PCI_REASSIGN
help
The PCI device backend driver allows the kernel to export arbitrary
- PCI devices to other guests. If you select this to be a module, you
-@@ -110,8 +113,8 @@ config XEN_PCIDEV_BACKEND
+@@ -127,8 +130,8 @@ config XEN_PCIDEV_BACKEND
choice
prompt "PCI Backend Mode"
depends on XEN_PCIDEV_BACKEND
diff --git a/patches.xen/xen3-fixup-xen b/patches.xen/xen3-fixup-xen
index 1adb720b8d..ac3f35b03a 100644
--- a/patches.xen/xen3-fixup-xen
+++ b/patches.xen/xen3-fixup-xen
@@ -1,12 +1,12 @@
Subject: Fix Xen build wrt. Xen files coming from mainline.
-From: http://xenbits.xensource.com/linux-2.6.18-xen.hg (tip 873:57acc535fd37)
+From: http://xenbits.xensource.com/linux-2.6.18-xen.hg (tip 898:ca12928cdafe)
Patch-mainline: obsolete
Acked-by: jbeulich@novell.com
---- head-2009-05-19.orig/drivers/xen/Makefile 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/xen/Makefile 2009-05-19 09:44:31.000000000 +0200
-@@ -1,7 +1,27 @@
+--- head-2009-06-09.orig/drivers/xen/Makefile 2009-06-09 16:05:45.000000000 +0200
++++ head-2009-06-09/drivers/xen/Makefile 2009-06-09 15:26:41.000000000 +0200
+@@ -1,7 +1,28 @@
-obj-y += grant-table.o features.o events.o manage.o
+obj-y += core/
+obj-y += console/
@@ -23,6 +23,7 @@ Acked-by: jbeulich@novell.com
+obj-$(CONFIG_XEN_BALLOON) += balloon/
+obj-$(CONFIG_XEN_BLKDEV_BACKEND) += blkback/
+obj-$(CONFIG_XEN_BLKDEV_TAP) += blktap/
++obj-$(CONFIG_XEN_BLKDEV_TAP2) += blktap2/
+obj-$(CONFIG_XEN_NETDEV_BACKEND) += netback/
+obj-$(CONFIG_XEN_TPMDEV_BACKEND) += tpmback/
+obj-$(CONFIG_XEN_BLKDEV_FRONTEND) += blkfront/
@@ -40,8 +41,8 @@ Acked-by: jbeulich@novell.com
+obj-$(CONFIG_XEN_NETDEV_ACCEL_SFC_UTIL) += sfc_netutil/
+obj-$(CONFIG_XEN_NETDEV_ACCEL_SFC_FRONTEND) += sfc_netfront/
+obj-$(CONFIG_XEN_NETDEV_ACCEL_SFC_BACKEND) += sfc_netback/
---- head-2009-05-19.orig/drivers/xen/xenbus/Makefile 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/xen/xenbus/Makefile 2009-05-19 09:44:31.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/xenbus/Makefile 2009-06-09 16:05:45.000000000 +0200
++++ head-2009-06-09/drivers/xen/xenbus/Makefile 2009-06-09 15:26:41.000000000 +0200
@@ -1,7 +1,9 @@
-obj-y += xenbus.o
+obj-y += xenbus_client.o xenbus_comms.o xenbus_xs.o xenbus_probe.o
@@ -58,8 +59,8 @@ Acked-by: jbeulich@novell.com
+xenbus-$(CONFIG_XEN_BACKEND) += xenbus_probe_backend.o
+obj-y += $(xenbus-y) $(xenbus-m)
+obj-$(CONFIG_XEN_XENBUS_DEV) += xenbus_dev.o
---- head-2009-05-19.orig/drivers/xen/xenbus/xenbus_client.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/xen/xenbus/xenbus_client.c 2009-05-19 09:44:31.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/xenbus/xenbus_client.c 2009-06-09 16:05:45.000000000 +0200
++++ head-2009-06-09/drivers/xen/xenbus/xenbus_client.c 2009-06-09 15:26:41.000000000 +0200
@@ -30,14 +30,18 @@
* IN THE SOFTWARE.
*/
@@ -526,9 +527,9 @@ Acked-by: jbeulich@novell.com
enum xenbus_state xenbus_read_driver_state(const char *path)
{
enum xenbus_state result;
---- head-2009-05-19.orig/drivers/xen/xenbus/xenbus_comms.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/xen/xenbus/xenbus_comms.c 2009-05-19 09:44:31.000000000 +0200
-@@ -34,19 +34,28 @@
+--- head-2009-06-09.orig/drivers/xen/xenbus/xenbus_comms.c 2009-06-09 16:05:45.000000000 +0200
++++ head-2009-06-09/drivers/xen/xenbus/xenbus_comms.c 2009-06-09 15:26:41.000000000 +0200
+@@ -34,25 +34,55 @@
#include <linux/interrupt.h>
#include <linux/sched.h>
#include <linux/err.h>
@@ -552,7 +553,6 @@ Acked-by: jbeulich@novell.com
-static DECLARE_WORK(probe_work, xenbus_probe);
+extern void xenbus_probe(void *);
-+extern int xenstored_ready;
+static DECLARE_WORK(probe_work, xenbus_probe, NULL);
static DECLARE_WAIT_QUEUE_HEAD(xb_waitq);
@@ -560,9 +560,40 @@ Acked-by: jbeulich@novell.com
-static irqreturn_t wake_waiting(int irq, void *unused)
+static irqreturn_t wake_waiting(int irq, void *unused, struct pt_regs *regs)
{
- if (unlikely(xenstored_ready == 0)) {
- xenstored_ready = 1;
-@@ -82,13 +91,6 @@ static const void *get_input_chunk(XENST
+- if (unlikely(xenstored_ready == 0)) {
+- xenstored_ready = 1;
+- schedule_work(&probe_work);
++ int old, new;
++
++ old = atomic_read(&xenbus_xsd_state);
++ switch (old) {
++ case XENBUS_XSD_UNCOMMITTED:
++ BUG();
++ return IRQ_HANDLED;
++
++ case XENBUS_XSD_FOREIGN_INIT:
++ new = XENBUS_XSD_FOREIGN_READY;
++ break;
++
++ case XENBUS_XSD_LOCAL_INIT:
++ new = XENBUS_XSD_LOCAL_READY;
++ break;
++
++ case XENBUS_XSD_FOREIGN_READY:
++ case XENBUS_XSD_LOCAL_READY:
++ default:
++ goto wake;
+ }
+
++ old = atomic_cmpxchg(&xenbus_xsd_state, old, new);
++ if (old != new)
++ schedule_work(&probe_work);
++
++wake:
+ wake_up(&xb_waitq);
+ return IRQ_HANDLED;
+ }
+@@ -82,13 +112,6 @@ static const void *get_input_chunk(XENST
return buf + MASK_XENSTORE_IDX(cons);
}
@@ -576,7 +607,7 @@ Acked-by: jbeulich@novell.com
int xb_write(const void *data, unsigned len)
{
struct xenstore_domain_interface *intf = xen_store_interface;
-@@ -197,12 +199,11 @@ int xb_read(void *data, unsigned len)
+@@ -197,12 +220,11 @@ int xb_read(void *data, unsigned len)
return 0;
}
@@ -591,7 +622,7 @@ Acked-by: jbeulich@novell.com
if (intf->req_prod != intf->req_cons)
printk(KERN_ERR "XENBUS request ring is not quiescent "
-@@ -215,20 +216,18 @@ int xb_init_comms(void)
+@@ -215,20 +237,18 @@ int xb_init_comms(void)
intf->rsp_cons = intf->rsp_prod;
}
@@ -622,8 +653,31 @@ Acked-by: jbeulich@novell.com
+
return 0;
}
---- head-2009-05-19.orig/drivers/xen/xenbus/xenbus_probe.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/xen/xenbus/xenbus_probe.c 2009-05-19 09:44:31.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/xenbus/xenbus_comms.h 2007-10-09 22:31:38.000000000 +0200
++++ head-2009-06-09/drivers/xen/xenbus/xenbus_comms.h 2009-05-29 10:25:53.000000000 +0200
+@@ -43,4 +43,20 @@ int xs_input_avail(void);
+ extern struct xenstore_domain_interface *xen_store_interface;
+ extern int xen_store_evtchn;
+
++/* For xenbus internal use. */
++enum {
++ XENBUS_XSD_UNCOMMITTED = 0,
++ XENBUS_XSD_FOREIGN_INIT,
++ XENBUS_XSD_FOREIGN_READY,
++ XENBUS_XSD_LOCAL_INIT,
++ XENBUS_XSD_LOCAL_READY,
++};
++extern atomic_t xenbus_xsd_state;
++
++static inline int is_xenstored_ready(void)
++{
++ int s = atomic_read(&xenbus_xsd_state);
++ return s == XENBUS_XSD_FOREIGN_READY || s == XENBUS_XSD_LOCAL_READY;
++}
++
+ #endif /* _XENBUS_COMMS_H */
+--- head-2009-06-09.orig/drivers/xen/xenbus/xenbus_probe.c 2009-06-09 16:05:45.000000000 +0200
++++ head-2009-06-09/drivers/xen/xenbus/xenbus_probe.c 2009-06-09 15:26:41.000000000 +0200
@@ -4,6 +4,7 @@
* Copyright (C) 2005 Rusty Russell, IBM Corporation
* Copyright (C) 2005 Mike Wray, Hewlett-Packard
@@ -641,7 +695,7 @@ Acked-by: jbeulich@novell.com
#include <linux/kernel.h>
#include <linux/err.h>
-@@ -40,29 +41,36 @@
+@@ -40,29 +41,37 @@
#include <linux/ctype.h>
#include <linux/fcntl.h>
#include <linux/mm.h>
@@ -651,6 +705,7 @@ Acked-by: jbeulich@novell.com
#include <linux/mutex.h>
-#include <linux/io.h>
+#include <linux/module.h>
++#include <xen/gnttab.h>
+#include <asm/io.h>
#include <asm/page.h>
@@ -686,7 +741,7 @@ Acked-by: jbeulich@novell.com
static BLOCKING_NOTIFIER_HEAD(xenstore_chain);
static void wait_for_devices(struct xenbus_driver *xendrv);
-@@ -92,26 +100,16 @@ int xenbus_match(struct device *_dev, st
+@@ -92,26 +101,16 @@ int xenbus_match(struct device *_dev, st
return match_device(drv->ids, to_xenbus_device(_dev)) != NULL;
}
@@ -716,7 +771,7 @@ Acked-by: jbeulich@novell.com
if (!strchr(bus_id, '/')) {
printk(KERN_WARNING "XENBUS: bus_id %s no slash\n", bus_id);
return -EINVAL;
-@@ -170,9 +168,30 @@ static int read_backend_details(struct x
+@@ -170,9 +169,30 @@ static int read_backend_details(struct x
return read_otherend_details(xendev, "backend-id", "backend");
}
@@ -750,7 +805,7 @@ Acked-by: jbeulich@novell.com
/* Bus type for frontend drivers. */
static struct xen_bus_type xenbus_frontend = {
-@@ -180,14 +199,19 @@ static struct xen_bus_type xenbus_fronte
+@@ -180,14 +200,19 @@ static struct xen_bus_type xenbus_fronte
.levels = 2, /* device/type/<id> */
.get_bus_id = frontend_bus_id,
.probe = xenbus_probe_frontend,
@@ -777,7 +832,7 @@ Acked-by: jbeulich@novell.com
},
};
-@@ -204,17 +228,16 @@ static void otherend_changed(struct xenb
+@@ -204,17 +229,16 @@ static void otherend_changed(struct xenb
if (!dev->otherend ||
strncmp(dev->otherend, vec[XS_WATCH_PATH],
strlen(dev->otherend))) {
@@ -799,7 +854,7 @@ Acked-by: jbeulich@novell.com
/*
* Ignore xenbus transitions during shutdown. This prevents us doing
* work that can fail e.g., when the rootfs is gone.
-@@ -228,6 +251,7 @@ static void otherend_changed(struct xenb
+@@ -228,6 +252,7 @@ static void otherend_changed(struct xenb
xenbus_frontend_closed(dev);
return;
}
@@ -807,7 +862,7 @@ Acked-by: jbeulich@novell.com
if (drv->otherend_changed)
drv->otherend_changed(dev, state);
-@@ -247,8 +271,8 @@ static int talk_to_otherend(struct xenbu
+@@ -247,8 +272,8 @@ static int talk_to_otherend(struct xenbu
static int watch_otherend(struct xenbus_device *dev)
{
@@ -818,7 +873,7 @@ Acked-by: jbeulich@novell.com
}
-@@ -274,8 +298,9 @@ int xenbus_dev_probe(struct device *_dev
+@@ -274,8 +299,9 @@ int xenbus_dev_probe(struct device *_dev
err = talk_to_otherend(dev);
if (err) {
@@ -830,7 +885,7 @@ Acked-by: jbeulich@novell.com
return err;
}
-@@ -285,7 +310,8 @@ int xenbus_dev_probe(struct device *_dev
+@@ -285,7 +311,8 @@ int xenbus_dev_probe(struct device *_dev
err = watch_otherend(dev);
if (err) {
@@ -840,11 +895,16 @@ Acked-by: jbeulich@novell.com
dev->nodename);
return err;
}
-@@ -321,43 +347,55 @@ static void xenbus_dev_shutdown(struct d
+@@ -321,43 +348,60 @@ static void xenbus_dev_shutdown(struct d
DPRINTK("%s", dev->nodename);
++/* Commented out since xenstored stubdom is now minios based not linux based
++#define XENSTORE_DOMAIN_SHARES_THIS_KERNEL
++*/
++#ifndef XENSTORE_DOMAIN_SHARES_THIS_KERNEL
+ if (is_initial_xendomain())
++#endif
+ return;
+
get_device(&dev->dev);
@@ -909,7 +969,7 @@ Acked-by: jbeulich@novell.com
if (ret)
return ret;
-@@ -366,7 +404,7 @@ int __xenbus_register_frontend(struct xe
+@@ -366,7 +410,7 @@ int __xenbus_register_frontend(struct xe
return 0;
}
@@ -918,7 +978,7 @@ Acked-by: jbeulich@novell.com
void xenbus_unregister_driver(struct xenbus_driver *drv)
{
-@@ -444,31 +482,30 @@ static void xenbus_dev_release(struct de
+@@ -444,31 +488,30 @@ static void xenbus_dev_release(struct de
}
static ssize_t xendev_show_nodename(struct device *dev,
@@ -958,7 +1018,7 @@ Acked-by: jbeulich@novell.com
int err;
struct xenbus_device *xendev;
size_t stringlen;
-@@ -476,6 +513,9 @@ int xenbus_probe_node(struct xen_bus_typ
+@@ -476,6 +519,9 @@ int xenbus_probe_node(struct xen_bus_typ
enum xenbus_state state = xenbus_read_driver_state(nodename);
@@ -968,7 +1028,7 @@ Acked-by: jbeulich@novell.com
if (state != XenbusStateInitialising) {
/* Device is not new, so ignore it. This can happen if a
device is going away after switching to Closed. */
-@@ -500,15 +540,14 @@ int xenbus_probe_node(struct xen_bus_typ
+@@ -500,15 +546,14 @@ int xenbus_probe_node(struct xen_bus_typ
xendev->devicetype = tmpstring;
init_completion(&xendev->down);
@@ -986,7 +1046,7 @@ Acked-by: jbeulich@novell.com
/* Register with generic device framework. */
err = device_register(&xendev->dev);
if (err)
-@@ -516,22 +555,15 @@ int xenbus_probe_node(struct xen_bus_typ
+@@ -516,22 +561,15 @@ int xenbus_probe_node(struct xen_bus_typ
err = device_create_file(&xendev->dev, &dev_attr_nodename);
if (err)
@@ -1013,7 +1073,7 @@ Acked-by: jbeulich@novell.com
device_unregister(&xendev->dev);
fail:
kfree(xendev);
-@@ -544,8 +576,7 @@ static int xenbus_probe_frontend(const c
+@@ -544,8 +582,7 @@ static int xenbus_probe_frontend(const c
char *nodename;
int err;
@@ -1023,7 +1083,7 @@ Acked-by: jbeulich@novell.com
if (!nodename)
return -ENOMEM;
-@@ -582,6 +613,9 @@ int xenbus_probe_devices(struct xen_bus_
+@@ -582,6 +619,9 @@ int xenbus_probe_devices(struct xen_bus_
char **dir;
unsigned int i, dir_n;
@@ -1033,7 +1093,7 @@ Acked-by: jbeulich@novell.com
dir = xenbus_directory(XBT_NIL, bus->root, "", &dir_n);
if (IS_ERR(dir))
return PTR_ERR(dir);
-@@ -618,15 +652,15 @@ static int strsep_len(const char *str, c
+@@ -618,15 +658,15 @@ static int strsep_len(const char *str, c
return (len == 0) ? i : -ERANGE;
}
@@ -1053,7 +1113,7 @@ Acked-by: jbeulich@novell.com
exists = xenbus_exists(XBT_NIL, node, "");
if (!exists) {
-@@ -636,8 +670,8 @@ void xenbus_dev_changed(const char *node
+@@ -636,8 +676,8 @@ void xenbus_dev_changed(const char *node
/* backend/<type>/... or device/<type>/... */
p = strchr(node, '/') + 1;
@@ -1064,7 +1124,7 @@ Acked-by: jbeulich@novell.com
rootlen = strsep_len(node, '/', bus->levels);
if (rootlen < 0)
-@@ -660,7 +694,7 @@ static void frontend_changed(struct xenb
+@@ -660,7 +700,7 @@ static void frontend_changed(struct xenb
{
DPRINTK("");
@@ -1073,7 +1133,7 @@ Acked-by: jbeulich@novell.com
}
/* We watch for devices appearing and vanishing. */
-@@ -685,7 +719,7 @@ static int suspend_dev(struct device *de
+@@ -685,7 +725,7 @@ static int suspend_dev(struct device *de
err = drv->suspend(xdev);
if (err)
printk(KERN_WARNING
@@ -1082,7 +1142,7 @@ Acked-by: jbeulich@novell.com
return 0;
}
-@@ -706,7 +740,7 @@ static int suspend_cancel_dev(struct dev
+@@ -706,7 +746,7 @@ static int suspend_cancel_dev(struct dev
if (err)
printk(KERN_WARNING
"xenbus: suspend_cancel %s failed: %i\n",
@@ -1091,7 +1151,7 @@ Acked-by: jbeulich@novell.com
return 0;
}
-@@ -728,7 +762,7 @@ static int resume_dev(struct device *dev
+@@ -728,7 +768,7 @@ static int resume_dev(struct device *dev
if (err) {
printk(KERN_WARNING
"xenbus: resume (talk_to_otherend) %s failed: %i\n",
@@ -1100,7 +1160,7 @@ Acked-by: jbeulich@novell.com
return err;
}
-@@ -739,7 +773,7 @@ static int resume_dev(struct device *dev
+@@ -739,7 +779,7 @@ static int resume_dev(struct device *dev
if (err) {
printk(KERN_WARNING
"xenbus: resume %s failed: %i\n",
@@ -1109,7 +1169,7 @@ Acked-by: jbeulich@novell.com
return err;
}
}
-@@ -748,7 +782,7 @@ static int resume_dev(struct device *dev
+@@ -748,7 +788,7 @@ static int resume_dev(struct device *dev
if (err) {
printk(KERN_WARNING
"xenbus_probe: resume (watch_otherend) %s failed: "
@@ -1118,7 +1178,7 @@ Acked-by: jbeulich@novell.com
return err;
}
-@@ -759,7 +793,8 @@ void xenbus_suspend(void)
+@@ -759,7 +799,8 @@ void xenbus_suspend(void)
{
DPRINTK("");
@@ -1128,7 +1188,7 @@ Acked-by: jbeulich@novell.com
xenbus_backend_suspend(suspend_dev);
xs_suspend();
}
-@@ -769,7 +804,8 @@ void xenbus_resume(void)
+@@ -769,7 +810,8 @@ void xenbus_resume(void)
{
xb_init_comms();
xs_resume();
@@ -1138,7 +1198,7 @@ Acked-by: jbeulich@novell.com
xenbus_backend_resume(resume_dev);
}
EXPORT_SYMBOL_GPL(xenbus_resume);
-@@ -777,7 +813,8 @@ EXPORT_SYMBOL_GPL(xenbus_resume);
+@@ -777,20 +819,20 @@ EXPORT_SYMBOL_GPL(xenbus_resume);
void xenbus_suspend_cancel(void)
{
xs_suspend_cancel();
@@ -1148,7 +1208,22 @@ Acked-by: jbeulich@novell.com
xenbus_backend_resume(suspend_cancel_dev);
}
EXPORT_SYMBOL_GPL(xenbus_suspend_cancel);
-@@ -805,7 +842,8 @@ void unregister_xenstore_notifier(struct
+
+ /* A flag to determine if xenstored is 'ready' (i.e. has started) */
+-int xenstored_ready = 0;
+-
++atomic_t xenbus_xsd_state = ATOMIC_INIT(XENBUS_XSD_UNCOMMITTED);
+
+ int register_xenstore_notifier(struct notifier_block *nb)
+ {
+ int ret = 0;
+
+- if (xenstored_ready > 0)
++ if (is_xenstored_ready())
+ ret = nb->notifier_call(nb, 0, NULL);
+ else
+ blocking_notifier_chain_register(&xenstore_chain, nb);
+@@ -805,9 +847,10 @@ void unregister_xenstore_notifier(struct
}
EXPORT_SYMBOL_GPL(unregister_xenstore_notifier);
@@ -1156,9 +1231,12 @@ Acked-by: jbeulich@novell.com
+
+void xenbus_probe(void *unused)
{
- BUG_ON((xenstored_ready <= 0));
+- BUG_ON((xenstored_ready <= 0));
++ BUG_ON(!is_xenstored_ready());
-@@ -818,71 +856,171 @@ void xenbus_probe(struct work_struct *un
+ /* Enumerate devices in xenstore and watch for changes. */
+ xenbus_probe_devices(&xenbus_frontend);
+@@ -818,71 +861,252 @@ void xenbus_probe(struct work_struct *un
blocking_notifier_call_chain(&xenstore_chain, 0, NULL);
}
@@ -1172,6 +1250,28 @@ Acked-by: jbeulich@novell.com
+static int xsd_kva_mmap(struct file *file, struct vm_area_struct *vma)
+{
+ size_t size = vma->vm_end - vma->vm_start;
++ int old;
++ int rc;
++
++ old = atomic_cmpxchg(&xenbus_xsd_state,
++ XENBUS_XSD_UNCOMMITTED,
++ XENBUS_XSD_LOCAL_INIT);
++ switch (old) {
++ case XENBUS_XSD_UNCOMMITTED:
++ rc = xb_init_comms();
++ if (rc != 0)
++ return rc;
++ break;
++
++ case XENBUS_XSD_FOREIGN_INIT:
++ case XENBUS_XSD_FOREIGN_READY:
++ return -EBUSY;
++
++ case XENBUS_XSD_LOCAL_INIT:
++ case XENBUS_XSD_LOCAL_READY:
++ default:
++ break;
++ }
+
+ if ((size > PAGE_SIZE) || (vma->vm_pgoff != 0))
+ return -EINVAL;
@@ -1204,6 +1304,62 @@ Acked-by: jbeulich@novell.com
+}
+#endif
+
++static int xb_free_port(evtchn_port_t port)
++{
++ struct evtchn_close close;
++ close.port = port;
++ return HYPERVISOR_event_channel_op(EVTCHNOP_close, &close);
++}
++
++int xenbus_conn(domid_t remote_dom, unsigned long *grant_ref, evtchn_port_t *local_port)
++{
++ struct evtchn_alloc_unbound alloc_unbound;
++ int rc, rc2;
++
++ BUG_ON(atomic_read(&xenbus_xsd_state) != XENBUS_XSD_FOREIGN_INIT);
++ BUG_ON(!is_initial_xendomain());
++
++#if defined(CONFIG_PROC_FS) && defined(CONFIG_XEN_PRIVILEGED_GUEST)
++ remove_xen_proc_entry("xsd_kva");
++ remove_xen_proc_entry("xsd_port");
++#endif
++
++ rc = xb_free_port(xen_store_evtchn);
++ if (rc != 0)
++ goto fail0;
++
++ alloc_unbound.dom = DOMID_SELF;
++ alloc_unbound.remote_dom = remote_dom;
++ rc = HYPERVISOR_event_channel_op(EVTCHNOP_alloc_unbound,
++ &alloc_unbound);
++ if (rc != 0)
++ goto fail0;
++ *local_port = xen_store_evtchn = alloc_unbound.port;
++
++ /* keep the old page (xen_store_mfn, xen_store_interface) */
++ rc = gnttab_grant_foreign_access(remote_dom, xen_store_mfn,
++ GTF_permit_access);
++ if (rc < 0)
++ goto fail1;
++ *grant_ref = rc;
++
++ rc = xb_init_comms();
++ if (rc != 0)
++ goto fail1;
++
++ return 0;
++
++fail1:
++ rc2 = xb_free_port(xen_store_evtchn);
++ if (rc2 != 0)
++ printk(KERN_WARNING
++ "XENBUS: Error freeing xenstore event channel: %d\n",
++ rc2);
++fail0:
++ xen_store_evtchn = -1;
++ return rc;
++}
++
+static int xenbus_probe_init(void)
{
int err = 0;
@@ -1251,7 +1407,7 @@ Acked-by: jbeulich@novell.com
+
+ /* Next allocate a local port which xenstored can bind to */
+ alloc_unbound.dom = DOMID_SELF;
-+ alloc_unbound.remote_dom = 0;
++ alloc_unbound.remote_dom = DOMID_SELF;
+
+ err = HYPERVISOR_event_channel_op(EVTCHNOP_alloc_unbound,
+ &alloc_unbound);
@@ -1277,7 +1433,8 @@ Acked-by: jbeulich@novell.com
+#endif
+ xen_store_interface = mfn_to_virt(xen_store_mfn);
} else {
- xenstored_ready = 1;
+- xenstored_ready = 1;
++ atomic_set(&xenbus_xsd_state, XENBUS_XSD_FOREIGN_READY);
+#ifdef CONFIG_XEN
xen_store_evtchn = xen_start_info->store_evtchn;
xen_store_mfn = xen_start_info->store_mfn;
@@ -1288,10 +1445,13 @@ Acked-by: jbeulich@novell.com
+ xen_store_interface = ioremap(xen_store_mfn << PAGE_SHIFT,
+ PAGE_SIZE);
+#endif
++ /* Initialize the shared memory rings to talk to xenstored */
++ err = xb_init_comms();
++ if (err)
++ goto err;
}
- xen_store_interface = mfn_to_virt(xen_store_mfn);
+
-+
+ xenbus_dev_init();
/* Initialize the interface to xenstore. */
@@ -1361,7 +1521,7 @@ Acked-by: jbeulich@novell.com
static int is_disconnected_device(struct device *dev, void *data)
{
-@@ -902,12 +1040,14 @@ static int is_disconnected_device(struct
+@@ -902,12 +1126,14 @@ static int is_disconnected_device(struct
return 0;
xendrv = to_xenbus_driver(dev->driver);
@@ -1377,7 +1537,7 @@ Acked-by: jbeulich@novell.com
return bus_for_each_dev(&xenbus_frontend.bus, NULL, drv,
is_disconnected_device);
}
-@@ -916,6 +1056,7 @@ static int print_device_status(struct de
+@@ -916,6 +1142,7 @@ static int print_device_status(struct de
{
struct xenbus_device *xendev = to_xenbus_device(dev);
struct device_driver *drv = data;
@@ -1385,7 +1545,7 @@ Acked-by: jbeulich@novell.com
/* Is this operation limited to a particular driver? */
if (drv && (dev->driver != drv))
-@@ -925,12 +1066,23 @@ static int print_device_status(struct de
+@@ -925,12 +1152,23 @@ static int print_device_status(struct de
/* Information only: is this too noisy? */
printk(KERN_INFO "XENBUS: Device with no driver: %s\n",
xendev->nodename);
@@ -1412,7 +1572,7 @@ Acked-by: jbeulich@novell.com
return 0;
}
-@@ -938,7 +1090,7 @@ static int print_device_status(struct de
+@@ -938,7 +1176,7 @@ static int print_device_status(struct de
static int ready_to_wait_for_devices;
/*
@@ -1421,7 +1581,7 @@ Acked-by: jbeulich@novell.com
* to do this to guarantee that the filesystems and / or network devices
* needed for boot are available, before we can allow the boot to proceed.
*
-@@ -953,18 +1105,30 @@ static int ready_to_wait_for_devices;
+@@ -953,18 +1191,30 @@ static int ready_to_wait_for_devices;
*/
static void wait_for_devices(struct xenbus_driver *xendrv)
{
@@ -1456,7 +1616,7 @@ Acked-by: jbeulich@novell.com
bus_for_each_dev(&xenbus_frontend.bus, NULL, drv,
print_device_status);
}
-@@ -972,10 +1136,18 @@ static void wait_for_devices(struct xenb
+@@ -972,10 +1222,18 @@ static void wait_for_devices(struct xenb
#ifndef MODULE
static int __init boot_wait_for_devices(void)
{
@@ -1477,8 +1637,8 @@ Acked-by: jbeulich@novell.com
+ return bus_for_each_dev(&xenbus_frontend.bus, NULL, arg, fn);
+}
+EXPORT_SYMBOL_GPL(xenbus_for_each_frontend);
---- head-2009-05-19.orig/drivers/xen/xenbus/xenbus_probe.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/xen/xenbus/xenbus_probe.h 2009-05-19 09:44:31.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/xenbus/xenbus_probe.h 2009-06-09 16:05:45.000000000 +0200
++++ head-2009-06-09/drivers/xen/xenbus/xenbus_probe.h 2009-06-09 15:26:41.000000000 +0200
@@ -34,43 +34,41 @@
#ifndef _XENBUS_PROBE_H
#define _XENBUS_PROBE_H
@@ -1533,8 +1693,8 @@ Acked-by: jbeulich@novell.com
+extern void dev_changed(const char *node, struct xen_bus_type *bus);
#endif
---- head-2009-05-19.orig/drivers/xen/xenbus/xenbus_xs.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/drivers/xen/xenbus/xenbus_xs.c 2009-05-19 09:44:31.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/xenbus/xenbus_xs.c 2009-06-09 16:05:45.000000000 +0200
++++ head-2009-06-09/drivers/xen/xenbus/xenbus_xs.c 2009-06-09 15:26:41.000000000 +0200
@@ -47,6 +47,14 @@
#include <xen/xenbus.h>
#include "xenbus_comms.h"
@@ -1722,8 +1882,28 @@ Acked-by: jbeulich@novell.com
for (;;) {
err = process_msg();
if (err)
---- head-2009-05-19.orig/include/xen/interface/callback.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/xen/interface/callback.h 2009-05-19 09:44:31.000000000 +0200
+@@ -832,7 +872,6 @@ static int xenbus_thread(void *unused)
+
+ int xs_init(void)
+ {
+- int err;
+ struct task_struct *task;
+
+ INIT_LIST_HEAD(&xs_state.reply_list);
+@@ -844,11 +883,6 @@ int xs_init(void)
+ init_rwsem(&xs_state.transaction_mutex);
+ init_rwsem(&xs_state.watch_mutex);
+
+- /* Initialize the shared memory rings to talk to xenstored */
+- err = xb_init_comms();
+- if (err)
+- return err;
+-
+ task = kthread_run(xenwatch_thread, NULL, "xenwatch");
+ if (IS_ERR(task))
+ return PTR_ERR(task);
+--- head-2009-06-09.orig/include/xen/interface/callback.h 2009-06-09 16:05:45.000000000 +0200
++++ head-2009-06-09/include/xen/interface/callback.h 2009-06-09 15:26:41.000000000 +0200
@@ -86,6 +86,8 @@ struct callback_register {
uint16_t flags;
xen_callback_t address;
@@ -1756,8 +1936,8 @@ Acked-by: jbeulich@novell.com
+ * indent-tabs-mode: nil
+ * End:
+ */
---- head-2009-05-19.orig/include/xen/interface/elfnote.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/xen/interface/elfnote.h 2009-05-19 09:44:31.000000000 +0200
+--- head-2009-06-09.orig/include/xen/interface/elfnote.h 2009-06-09 16:05:45.000000000 +0200
++++ head-2009-06-09/include/xen/interface/elfnote.h 2009-06-09 15:26:41.000000000 +0200
@@ -3,6 +3,24 @@
*
* Definitions used for the Xen ELF notes.
@@ -1892,8 +2072,8 @@ Acked-by: jbeulich@novell.com
#endif /* __XEN_PUBLIC_ELFNOTE_H__ */
/*
---- head-2009-05-19.orig/include/xen/interface/event_channel.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/xen/interface/event_channel.h 2009-05-19 09:44:31.000000000 +0200
+--- head-2009-06-09.orig/include/xen/interface/event_channel.h 2009-06-09 16:05:45.000000000 +0200
++++ head-2009-06-09/include/xen/interface/event_channel.h 2009-06-09 15:26:41.000000000 +0200
@@ -3,6 +3,24 @@
*
* Event channels between domains.
@@ -2233,8 +2413,8 @@ Acked-by: jbeulich@novell.com
+ * indent-tabs-mode: nil
+ * End:
+ */
---- head-2009-05-19.orig/include/xen/interface/features.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/xen/interface/features.h 2009-05-19 09:44:31.000000000 +0200
+--- head-2009-06-09.orig/include/xen/interface/features.h 2009-06-09 16:05:45.000000000 +0200
++++ head-2009-06-09/include/xen/interface/features.h 2009-06-09 15:26:41.000000000 +0200
@@ -3,6 +3,24 @@
*
* Feature flags, reported by XENVER_get_features.
@@ -2286,8 +2466,8 @@ Acked-by: jbeulich@novell.com
+ * indent-tabs-mode: nil
+ * End:
+ */
---- head-2009-05-19.orig/include/xen/interface/grant_table.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/xen/interface/grant_table.h 2009-05-19 09:44:31.000000000 +0200
+--- head-2009-06-09.orig/include/xen/interface/grant_table.h 2009-06-09 16:05:45.000000000 +0200
++++ head-2009-06-09/include/xen/interface/grant_table.h 2009-06-09 15:26:41.000000000 +0200
@@ -100,6 +100,7 @@ struct grant_entry {
*/
uint32_t frame;
@@ -2499,8 +2679,8 @@ Acked-by: jbeulich@novell.com
+ * indent-tabs-mode: nil
+ * End:
+ */
---- head-2009-05-19.orig/include/xen/interface/io/blkif.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/xen/interface/io/blkif.h 2009-05-19 09:44:31.000000000 +0200
+--- head-2009-06-09.orig/include/xen/interface/io/blkif.h 2009-06-09 16:05:45.000000000 +0200
++++ head-2009-06-09/include/xen/interface/io/blkif.h 2009-06-09 15:26:41.000000000 +0200
@@ -3,6 +3,24 @@
*
* Unified block-device I/O interface for Xen guest OSes.
@@ -2628,8 +2808,8 @@ Acked-by: jbeulich@novell.com
+ * indent-tabs-mode: nil
+ * End:
+ */
---- head-2009-05-19.orig/include/xen/interface/io/console.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/xen/interface/io/console.h 2009-05-19 09:44:31.000000000 +0200
+--- head-2009-06-09.orig/include/xen/interface/io/console.h 2009-06-09 16:05:45.000000000 +0200
++++ head-2009-06-09/include/xen/interface/io/console.h 2009-06-09 15:26:41.000000000 +0200
@@ -3,6 +3,24 @@
*
* Console I/O interface for Xen guest OSes.
@@ -2669,8 +2849,8 @@ Acked-by: jbeulich@novell.com
+ * indent-tabs-mode: nil
+ * End:
+ */
---- head-2009-05-19.orig/include/xen/interface/io/fbif.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/xen/interface/io/fbif.h 2009-05-19 09:44:31.000000000 +0200
+--- head-2009-06-09.orig/include/xen/interface/io/fbif.h 2009-06-09 16:05:45.000000000 +0200
++++ head-2009-06-09/include/xen/interface/io/fbif.h 2009-06-09 15:26:41.000000000 +0200
@@ -41,12 +41,13 @@
*/
#define XENFB_TYPE_UPDATE 2
@@ -2849,8 +3029,8 @@ Acked-by: jbeulich@novell.com
+ * indent-tabs-mode: nil
+ * End:
+ */
---- head-2009-05-19.orig/include/xen/interface/io/kbdif.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/xen/interface/io/kbdif.h 2009-05-19 09:44:31.000000000 +0200
+--- head-2009-06-09.orig/include/xen/interface/io/kbdif.h 2009-06-09 16:05:45.000000000 +0200
++++ head-2009-06-09/include/xen/interface/io/kbdif.h 2009-06-09 15:26:41.000000000 +0200
@@ -45,34 +45,38 @@
*/
#define XENKBD_TYPE_POS 4
@@ -2968,8 +3148,8 @@ Acked-by: jbeulich@novell.com
+ * indent-tabs-mode: nil
+ * End:
+ */
---- head-2009-05-19.orig/include/xen/interface/io/netif.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/xen/interface/io/netif.h 2009-05-19 09:44:31.000000000 +0200
+--- head-2009-06-09.orig/include/xen/interface/io/netif.h 2009-06-09 16:05:45.000000000 +0200
++++ head-2009-06-09/include/xen/interface/io/netif.h 2009-06-09 15:26:41.000000000 +0200
@@ -3,6 +3,24 @@
*
* Unified network-device I/O interface for Xen guest OSes.
@@ -3169,8 +3349,8 @@ Acked-by: jbeulich@novell.com
+ * indent-tabs-mode: nil
+ * End:
+ */
---- head-2009-05-19.orig/include/xen/interface/io/protocols.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/xen/interface/io/protocols.h 2009-05-19 09:44:31.000000000 +0200
+--- head-2009-06-09.orig/include/xen/interface/io/protocols.h 2009-06-09 16:05:45.000000000 +0200
++++ head-2009-06-09/include/xen/interface/io/protocols.h 2009-06-09 15:26:41.000000000 +0200
@@ -1,10 +1,31 @@
+/******************************************************************************
+ * protocols.h
@@ -3213,8 +3393,8 @@ Acked-by: jbeulich@novell.com
#else
# error arch fixup needed here
#endif
---- head-2009-05-19.orig/include/xen/interface/io/ring.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/xen/interface/io/ring.h 2009-05-19 09:44:31.000000000 +0200
+--- head-2009-06-09.orig/include/xen/interface/io/ring.h 2009-06-09 16:05:45.000000000 +0200
++++ head-2009-06-09/include/xen/interface/io/ring.h 2009-06-09 15:26:41.000000000 +0200
@@ -3,16 +3,42 @@
*
* Shared producer-consumer ring macros.
@@ -3598,8 +3778,8 @@ Acked-by: jbeulich@novell.com
+ * indent-tabs-mode: nil
+ * End:
+ */
---- head-2009-05-19.orig/include/xen/interface/io/xenbus.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/xen/interface/io/xenbus.h 2009-05-19 09:44:31.000000000 +0200
+--- head-2009-06-09.orig/include/xen/interface/io/xenbus.h 2009-06-09 16:05:45.000000000 +0200
++++ head-2009-06-09/include/xen/interface/io/xenbus.h 2009-06-09 15:26:41.000000000 +0200
@@ -3,42 +3,78 @@
*
* Xenbus protocol details.
@@ -3703,8 +3883,8 @@ Acked-by: jbeulich@novell.com
+ * indent-tabs-mode: nil
* End:
*/
---- head-2009-05-19.orig/include/xen/interface/io/xs_wire.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/xen/interface/io/xs_wire.h 2009-05-19 09:44:31.000000000 +0200
+--- head-2009-06-09.orig/include/xen/interface/io/xs_wire.h 2009-06-09 16:05:45.000000000 +0200
++++ head-2009-06-09/include/xen/interface/io/xs_wire.h 2009-06-09 15:26:41.000000000 +0200
@@ -1,6 +1,25 @@
/*
* Details of the "wire" protocol between Xen Store Daemon and client
@@ -3778,8 +3958,8 @@ Acked-by: jbeulich@novell.com
+ * indent-tabs-mode: nil
+ * End:
+ */
---- head-2009-05-19.orig/include/xen/interface/memory.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/xen/interface/memory.h 2009-05-19 09:44:31.000000000 +0200
+--- head-2009-06-09.orig/include/xen/interface/memory.h 2009-06-09 16:05:45.000000000 +0200
++++ head-2009-06-09/include/xen/interface/memory.h 2009-06-09 15:26:41.000000000 +0200
@@ -3,6 +3,24 @@
*
* Memory reservation and information.
@@ -4068,8 +4248,8 @@ Acked-by: jbeulich@novell.com
+ * indent-tabs-mode: nil
+ * End:
+ */
---- head-2009-05-19.orig/include/xen/interface/physdev.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/xen/interface/physdev.h 2009-05-19 09:44:31.000000000 +0200
+--- head-2009-06-09.orig/include/xen/interface/physdev.h 2009-06-09 16:05:45.000000000 +0200
++++ head-2009-06-09/include/xen/interface/physdev.h 2009-06-09 15:26:41.000000000 +0200
@@ -24,7 +24,7 @@
/*
* Prototype for this hypercall is:
@@ -4358,8 +4538,8 @@ Acked-by: jbeulich@novell.com
+ * indent-tabs-mode: nil
+ * End:
+ */
---- head-2009-05-19.orig/include/xen/interface/sched.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/xen/interface/sched.h 2009-05-19 09:44:31.000000000 +0200
+--- head-2009-06-09.orig/include/xen/interface/sched.h 2009-06-09 16:05:45.000000000 +0200
++++ head-2009-06-09/include/xen/interface/sched.h 2009-06-09 15:26:41.000000000 +0200
@@ -3,6 +3,24 @@
*
* Scheduler state interactions
@@ -4459,8 +4639,8 @@ Acked-by: jbeulich@novell.com
+ * indent-tabs-mode: nil
+ * End:
+ */
---- head-2009-05-19.orig/include/xen/interface/vcpu.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/xen/interface/vcpu.h 2009-05-19 09:44:31.000000000 +0200
+--- head-2009-06-09.orig/include/xen/interface/vcpu.h 2009-06-09 16:05:45.000000000 +0200
++++ head-2009-06-09/include/xen/interface/vcpu.h 2009-06-09 15:26:41.000000000 +0200
@@ -29,9 +29,9 @@
/*
@@ -4677,8 +4857,8 @@ Acked-by: jbeulich@novell.com
+ * indent-tabs-mode: nil
+ * End:
+ */
---- head-2009-05-19.orig/include/xen/interface/version.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/xen/interface/version.h 2009-05-19 09:44:31.000000000 +0200
+--- head-2009-06-09.orig/include/xen/interface/version.h 2009-06-09 16:05:45.000000000 +0200
++++ head-2009-06-09/include/xen/interface/version.h 2009-06-09 15:26:41.000000000 +0200
@@ -3,6 +3,24 @@
*
* Xen version, type, and compile information.
@@ -4780,8 +4960,8 @@ Acked-by: jbeulich@novell.com
+ * indent-tabs-mode: nil
+ * End:
+ */
---- head-2009-05-19.orig/include/xen/interface/xen.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/xen/interface/xen.h 2009-05-19 09:16:41.000000000 +0200
+--- head-2009-06-09.orig/include/xen/interface/xen.h 2009-06-09 16:05:45.000000000 +0200
++++ head-2009-06-09/include/xen/interface/xen.h 2009-06-09 15:26:41.000000000 +0200
@@ -3,35 +3,68 @@
*
* Guest OS interface to Xen.
@@ -5504,8 +5684,8 @@ Acked-by: jbeulich@novell.com
+ * indent-tabs-mode: nil
+ * End:
+ */
---- head-2009-05-19.orig/include/xen/xenbus.h 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/include/xen/xenbus.h 2009-05-19 09:44:31.000000000 +0200
+--- head-2009-06-09.orig/include/xen/xenbus.h 2009-06-09 16:05:45.000000000 +0200
++++ head-2009-06-09/include/xen/xenbus.h 2009-06-09 15:26:41.000000000 +0200
@@ -39,6 +39,7 @@
#include <linux/mutex.h>
#include <linux/completion.h>
diff --git a/patches.xen/xen3-patch-2.6.18 b/patches.xen/xen3-patch-2.6.18
index abf8d99269..5da7a571ae 100644
--- a/patches.xen/xen3-patch-2.6.18
+++ b/patches.xen/xen3-patch-2.6.18
@@ -6,8 +6,8 @@ Automatically created from "patches.kernel.org/patch-2.6.18" by xen-port-patches
Acked-by: jbeulich@novell.com
---- head-2009-05-04.orig/arch/x86/Kconfig 2009-05-13 14:06:24.000000000 +0200
-+++ head-2009-05-04/arch/x86/Kconfig 2009-05-04 11:04:43.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/Kconfig 2009-05-29 11:51:55.000000000 +0200
++++ head-2009-05-29/arch/x86/Kconfig 2009-05-29 11:56:56.000000000 +0200
@@ -54,7 +54,6 @@ config ARCH_DEFCONFIG
config GENERIC_TIME
@@ -16,17 +16,17 @@ Acked-by: jbeulich@novell.com
config GENERIC_CMOS_UPDATE
def_bool y
---- head-2009-05-04.orig/arch/x86/kernel/Makefile 2009-05-13 14:06:24.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/Makefile 2009-05-04 11:04:43.000000000 +0200
-@@ -129,5 +129,5 @@ ifeq ($(CONFIG_X86_64),y)
+--- head-2009-05-29.orig/arch/x86/kernel/Makefile 2009-05-29 11:36:57.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/Makefile 2009-05-29 11:56:56.000000000 +0200
+@@ -130,5 +130,5 @@ ifeq ($(CONFIG_X86_64),y)
pci-dma_64-$(CONFIG_XEN) += pci-dma_32.o
endif
-disabled-obj-$(CONFIG_XEN) := i8259_$(BITS).o reboot.o smpboot_$(BITS).o
+disabled-obj-$(CONFIG_XEN) := i8253.o i8259_$(BITS).o reboot.o smpboot_$(BITS).o tsc_$(BITS).o
%/head_$(BITS).o %/head_$(BITS).s: $(if $(CONFIG_XEN),EXTRA_AFLAGS,dummy) :=
---- head-2009-05-04.orig/arch/x86/kernel/setup64-xen.c 2009-05-13 14:06:24.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/setup64-xen.c 2009-05-04 11:04:43.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/setup64-xen.c 2008-01-28 12:24:19.000000000 +0100
++++ head-2009-05-29/arch/x86/kernel/setup64-xen.c 2009-05-29 11:56:56.000000000 +0200
@@ -363,5 +363,7 @@ void __cpuinit cpu_init (void)
fpu_init();
@@ -36,8 +36,8 @@ Acked-by: jbeulich@novell.com
+ if (raw_irqs_disabled())
+ kernel_eflags &= ~X86_EFLAGS_IF;
}
---- head-2009-05-04.orig/arch/x86/kernel/time_32-xen.c 2009-05-13 14:06:24.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/time_32-xen.c 2009-05-04 11:04:43.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/time_32-xen.c 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/time_32-xen.c 2009-05-29 11:56:56.000000000 +0200
@@ -76,8 +76,13 @@
#if defined (__i386__)
@@ -242,8 +242,8 @@ Acked-by: jbeulich@novell.com
vxtime.mode = VXTIME_TSC;
vxtime.quot = (1000000L << 32) / vxtime_hz;
vxtime.tsc_quot = (1000L << 32) / cpu_khz;
---- head-2009-05-04.orig/drivers/xen/console/console.c 2009-05-13 14:06:24.000000000 +0200
-+++ head-2009-05-04/drivers/xen/console/console.c 2009-05-04 11:04:43.000000000 +0200
+--- head-2009-05-29.orig/drivers/xen/console/console.c 2009-03-18 10:39:31.000000000 +0100
++++ head-2009-05-29/drivers/xen/console/console.c 2009-05-29 11:56:56.000000000 +0200
@@ -94,7 +94,6 @@ static int __init xencons_setup(char *st
{
char *q;
@@ -252,8 +252,8 @@ Acked-by: jbeulich@novell.com
console_use_vt = 1;
if (!strncmp(str, "ttyS", 4)) {
---- head-2009-05-04.orig/arch/x86/include/mach-xen/asm/pgtable_64.h 2009-05-13 14:06:24.000000000 +0200
-+++ head-2009-05-04/arch/x86/include/mach-xen/asm/pgtable_64.h 2009-05-04 11:04:43.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/include/mach-xen/asm/pgtable_64.h 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-05-29/arch/x86/include/mach-xen/asm/pgtable_64.h 2009-05-29 11:56:56.000000000 +0200
@@ -394,7 +394,6 @@ static inline int pmd_large(pmd_t pte) {
/*
@@ -262,8 +262,8 @@ Acked-by: jbeulich@novell.com
*/
#define pgd_page(pgd) ((unsigned long) __va(pgd_val(pgd) & PTE_MASK))
#define pgd_index(address) (((address) >> PGDIR_SHIFT) & (PTRS_PER_PGD-1))
---- head-2009-05-04.orig/arch/x86/include/mach-xen/asm/processor_32.h 2009-05-13 14:06:24.000000000 +0200
-+++ head-2009-05-04/arch/x86/include/mach-xen/asm/processor_32.h 2009-05-04 11:04:43.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/include/mach-xen/asm/processor_32.h 2008-01-28 12:24:19.000000000 +0100
++++ head-2009-05-29/arch/x86/include/mach-xen/asm/processor_32.h 2009-05-29 11:56:56.000000000 +0200
@@ -23,7 +23,7 @@
#include <xen/interface/physdev.h>
@@ -273,8 +273,8 @@ Acked-by: jbeulich@novell.com
struct desc_struct {
unsigned long a,b;
---- head-2009-05-04.orig/arch/x86/include/asm/thread_info.h 2009-05-13 14:06:24.000000000 +0200
-+++ head-2009-05-04/arch/x86/include/asm/thread_info.h 2009-05-04 11:04:43.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/include/asm/thread_info.h 2009-05-29 16:29:08.000000000 +0200
++++ head-2009-05-29/arch/x86/include/asm/thread_info.h 2009-05-29 11:56:56.000000000 +0200
@@ -142,11 +142,15 @@ struct thread_info {
(_TIF_SIGPENDING|_TIF_MCE_NOTIFY|_TIF_NOTIFY_RESUME)
diff --git a/patches.xen/xen3-patch-2.6.19 b/patches.xen/xen3-patch-2.6.19
index 171698089e..aa855fa7af 100644
--- a/patches.xen/xen3-patch-2.6.19
+++ b/patches.xen/xen3-patch-2.6.19
@@ -6,8 +6,8 @@ Automatically created from "patches.kernel.org/patch-2.6.19" by xen-port-patches
Acked-by: jbeulich@novell.com
---- head-2009-05-19.orig/arch/x86/Kconfig 2009-05-19 09:48:36.000000000 +0200
-+++ head-2009-05-19/arch/x86/Kconfig 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/Kconfig 2009-06-09 15:32:17.000000000 +0200
++++ head-2009-06-09/arch/x86/Kconfig 2009-06-09 15:35:38.000000000 +0200
@@ -480,6 +480,7 @@ config SCHED_OMIT_FRAME_POINTER
menuconfig PARAVIRT_GUEST
@@ -16,8 +16,8 @@ Acked-by: jbeulich@novell.com
---help---
Say Y here to get to see options related to running Linux under
various hypervisors. This option alone does not add any kernel code.
---- head-2009-05-19.orig/arch/x86/kernel/acpi/boot.c 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/acpi/boot.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/acpi/boot.c 2009-06-09 15:21:05.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/acpi/boot.c 2009-06-09 15:35:38.000000000 +0200
@@ -71,8 +71,12 @@ int acpi_strict;
u8 acpi_sci_flags __initdata;
@@ -40,8 +40,8 @@ Acked-by: jbeulich@novell.com
static int __init parse_acpi_skip_timer_override(char *arg)
{
acpi_skip_timer_override = 1;
---- head-2009-05-19.orig/arch/x86/kernel/apic_32-xen.c 2007-06-12 13:12:48.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/apic_32-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/apic_32-xen.c 2007-06-12 13:12:48.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/apic_32-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -54,7 +54,6 @@ static cpumask_t timer_bcast_ipi;
/*
* Knob to control our willingness to enable the local APIC.
@@ -82,8 +82,8 @@ Acked-by: jbeulich@novell.com
#endif
}
}
---- head-2009-05-19.orig/arch/x86/kernel/cpu/common-xen.c 2009-05-19 09:16:41.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/cpu/common-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/cpu/common-xen.c 2009-05-19 09:16:41.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/cpu/common-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -43,7 +43,7 @@ struct cpu_dev * cpu_devs[X86_VENDOR_NUM
extern int disable_pse;
@@ -147,8 +147,8 @@ Acked-by: jbeulich@novell.com
/* Clear all 6 debug registers: */
set_debugreg(0, 0);
---- head-2009-05-19.orig/arch/x86/kernel/entry_32-xen.S 2009-05-19 09:16:41.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/entry_32-xen.S 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/entry_32-xen.S 2009-05-19 09:16:41.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/entry_32-xen.S 2009-06-09 15:35:38.000000000 +0200
@@ -80,8 +80,12 @@ VM_MASK = 0x00020000
NMI_MASK = 0x80000000
@@ -535,8 +535,8 @@ Acked-by: jbeulich@novell.com
.section .rodata,"a"
#include "syscall_table.S"
---- head-2009-05-19.orig/arch/x86/kernel/head_32-xen.S 2007-06-12 13:12:48.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/head_32-xen.S 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/head_32-xen.S 2007-06-12 13:12:48.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/head_32-xen.S 2009-06-09 15:35:38.000000000 +0200
@@ -62,7 +62,7 @@ ENTRY(startup_32)
movl %eax,%gs
cld # gcc2 wants the direction flag cleared at all times
@@ -546,8 +546,8 @@ Acked-by: jbeulich@novell.com
jmp start_kernel
#define HYPERCALL_PAGE_OFFSET 0x1000
---- head-2009-05-19.orig/arch/x86/kernel/io_apic_32-xen.c 2009-03-18 10:39:31.000000000 +0100
-+++ head-2009-05-19/arch/x86/kernel/io_apic_32-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/io_apic_32-xen.c 2009-03-18 10:39:31.000000000 +0100
++++ head-2009-06-09/arch/x86/kernel/io_apic_32-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -31,6 +31,9 @@
#include <linux/acpi.h>
#include <linux/module.h>
@@ -1627,8 +1627,8 @@ Acked-by: jbeulich@novell.com
+ return 0;
+}
+early_param("noapic", parse_noapic);
---- head-2009-05-19.orig/arch/x86/kernel/irq_32-xen.c 2008-10-29 09:55:56.000000000 +0100
-+++ head-2009-05-19/arch/x86/kernel/irq_32-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/irq_32-xen.c 2008-10-29 09:55:56.000000000 +0100
++++ head-2009-06-09/arch/x86/kernel/irq_32-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -53,8 +53,10 @@ static union irq_ctx *softirq_ctx[NR_CPU
*/
fastcall unsigned int do_IRQ(struct pt_regs *regs)
@@ -1685,8 +1685,8 @@ Acked-by: jbeulich@novell.com
seq_printf(p, " %s", action->name);
for (action=action->next; action; action = action->next)
---- head-2009-05-19.orig/arch/x86/kernel/ldt_32-xen.c 2007-06-12 13:12:48.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/ldt_32-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/ldt_32-xen.c 2007-06-12 13:12:48.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/ldt_32-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -1,5 +1,5 @@
/*
- * linux/kernel/ldt.c
@@ -1694,8 +1694,8 @@ Acked-by: jbeulich@novell.com
*
* Copyright (C) 1992 Krishna Balasubramanian and Linus Torvalds
* Copyright (C) 1999 Ingo Molnar <mingo@redhat.com>
---- head-2009-05-19.orig/arch/x86/kernel/microcode-xen.c 2007-06-12 13:12:48.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/microcode-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/microcode-xen.c 2007-06-12 13:12:48.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/microcode-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -2,6 +2,7 @@
* Intel CPU Microcode Update Driver for Linux
*
@@ -1831,8 +1831,8 @@ Acked-by: jbeulich@novell.com
module_init(microcode_init)
module_exit(microcode_exit)
-MODULE_ALIAS_MISCDEV(MICROCODE_MINOR);
---- head-2009-05-19.orig/arch/x86/kernel/mpparse_32-xen.c 2007-06-12 13:12:48.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/mpparse_32-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/mpparse_32-xen.c 2007-06-12 13:12:48.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/mpparse_32-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -30,6 +30,7 @@
#include <asm/io_apic.h>
@@ -1999,8 +1999,8 @@ Acked-by: jbeulich@novell.com
/*
* Mapping between Global System Interrups, which
* represent all possible interrupts, and IRQs
---- head-2009-05-19.orig/arch/x86/kernel/pci-dma-xen.c 2008-10-29 09:55:56.000000000 +0100
-+++ head-2009-05-19/arch/x86/kernel/pci-dma-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/pci-dma-xen.c 2008-10-29 09:55:56.000000000 +0100
++++ head-2009-06-09/arch/x86/kernel/pci-dma-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -110,8 +110,7 @@ dma_map_sg(struct device *hwdev, struct
{
int i, rc;
@@ -2059,8 +2059,8 @@ Acked-by: jbeulich@novell.com
if (swiotlb)
swiotlb_unmap_single(dev, dma_addr, size, direction);
else
---- head-2009-05-19.orig/arch/x86/kernel/process_32-xen.c 2008-07-21 11:00:32.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/process_32-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/process_32-xen.c 2008-07-21 11:00:32.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/process_32-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -37,6 +37,7 @@
#include <linux/kallsyms.h>
#include <linux/ptrace.h>
@@ -2150,8 +2150,8 @@ Acked-by: jbeulich@novell.com
sp -= get_random_int() % 8192;
return sp & ~0xf;
}
---- head-2009-05-19.orig/arch/x86/kernel/setup_32-xen.c 2008-04-22 15:41:51.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/setup_32-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/setup_32-xen.c 2008-04-22 15:41:51.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/setup_32-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -56,6 +56,7 @@
#include <asm/apic.h>
#include <asm/e820.h>
@@ -2724,8 +2724,8 @@ Acked-by: jbeulich@novell.com
#ifdef CONFIG_ACPI
acpi_boot_init();
---- head-2009-05-19.orig/arch/x86/kernel/smp_32-xen.c 2007-12-10 08:47:31.000000000 +0100
-+++ head-2009-05-19/arch/x86/kernel/smp_32-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/smp_32-xen.c 2007-12-10 08:47:31.000000000 +0100
++++ head-2009-06-09/arch/x86/kernel/smp_32-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -279,8 +279,7 @@ static inline void leave_mm (unsigned lo
* 2) Leave the mm if we are in the lazy tlb mode.
*/
@@ -2825,8 +2825,8 @@ Acked-by: jbeulich@novell.com
+ return 0;
+}
+EXPORT_SYMBOL(smp_call_function_single);
---- head-2009-05-19.orig/arch/x86/kernel/time_32-xen.c 2009-05-19 09:48:36.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/time_32-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/time_32-xen.c 2009-06-09 15:32:17.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/time_32-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -89,7 +89,6 @@ int pit_latch_buggy; /* ext
unsigned long vxtime_hz = PIT_TICK_RATE;
struct vxtime_data __vxtime __section_vxtime; /* for vsyscalls */
@@ -3009,8 +3009,8 @@ Acked-by: jbeulich@novell.com
if ((hpet_enable() >= 0) && hpet_use_timer) {
printk("Using HPET for base-timer\n");
---- head-2009-05-19.orig/arch/x86/kernel/traps_32-xen.c 2008-04-02 12:34:02.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/traps_32-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/traps_32-xen.c 2008-04-02 12:34:02.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/traps_32-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -28,6 +28,7 @@
#include <linux/kprobes.h>
#include <linux/kexec.h>
@@ -3457,8 +3457,8 @@ Acked-by: jbeulich@novell.com
#ifdef CONFIG_KPROBES
fastcall void __kprobes do_int3(struct pt_regs *regs, long error_code)
{
---- head-2009-05-19.orig/arch/x86/mach-xen/setup.c 2008-04-02 12:34:02.000000000 +0200
-+++ head-2009-05-19/arch/x86/mach-xen/setup.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/mach-xen/setup.c 2008-04-02 12:34:02.000000000 +0200
++++ head-2009-06-09/arch/x86/mach-xen/setup.c 2009-06-09 15:35:38.000000000 +0200
@@ -103,8 +103,10 @@ void __init pre_setup_arch_hook(void)
setup_xen_features();
@@ -3472,8 +3472,8 @@ Acked-by: jbeulich@novell.com
if (HYPERVISOR_memory_op(XENMEM_machphys_mapping, &mapping) == 0) {
machine_to_phys_mapping = (unsigned long *)mapping.v_start;
---- head-2009-05-19.orig/arch/x86/mm/fault_32-xen.c 2007-12-10 08:47:31.000000000 +0100
-+++ head-2009-05-19/arch/x86/mm/fault_32-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/mm/fault_32-xen.c 2007-12-10 08:47:31.000000000 +0100
++++ head-2009-06-09/arch/x86/mm/fault_32-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -27,21 +27,24 @@
#include <asm/uaccess.h>
#include <asm/desc.h>
@@ -3560,8 +3560,8 @@ Acked-by: jbeulich@novell.com
yield();
down_read(&mm->mmap_sem);
goto survive;
---- head-2009-05-19.orig/arch/x86/mm/highmem_32-xen.c 2008-10-29 09:55:56.000000000 +0100
-+++ head-2009-05-19/arch/x86/mm/highmem_32-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/mm/highmem_32-xen.c 2008-10-29 09:55:56.000000000 +0100
++++ head-2009-06-09/arch/x86/mm/highmem_32-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -38,11 +38,9 @@ static void *__kmap_atomic(struct page *
idx = type + KM_TYPE_NR*smp_processor_id();
@@ -3628,8 +3628,8 @@ Acked-by: jbeulich@novell.com
return (void*) vaddr;
}
---- head-2009-05-19.orig/arch/x86/mm/hypervisor.c 2009-03-18 10:39:31.000000000 +0100
-+++ head-2009-05-19/arch/x86/mm/hypervisor.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/mm/hypervisor.c 2009-06-09 15:01:37.000000000 +0200
++++ head-2009-06-09/arch/x86/mm/hypervisor.c 2009-06-09 15:35:38.000000000 +0200
@@ -31,6 +31,7 @@
*/
@@ -3941,7 +3941,7 @@ Acked-by: jbeulich@novell.com
void xen_l1_entry_update(pte_t *ptr, pte_t val)
{
mmu_update_t u;
-@@ -542,7 +839,8 @@ int write_ldt_entry(void *ldt, int entry
+@@ -546,7 +843,8 @@ int write_ldt_entry(void *ldt, int entry
#define MAX_BATCHED_FULL_PTES 32
int xen_change_pte_range(struct mm_struct *mm, pmd_t *pmd,
@@ -3951,7 +3951,7 @@ Acked-by: jbeulich@novell.com
{
int rc = 0, i = 0;
mmu_update_t u[MAX_BATCHED_FULL_PTES];
-@@ -555,10 +853,14 @@ int xen_change_pte_range(struct mm_struc
+@@ -559,10 +857,14 @@ int xen_change_pte_range(struct mm_struc
pte = pte_offset_map_lock(mm, pmd, addr, &ptl);
do {
if (pte_present(*pte)) {
@@ -3967,8 +3967,8 @@ Acked-by: jbeulich@novell.com
if (++i == MAX_BATCHED_FULL_PTES) {
if ((rc = HYPERVISOR_mmu_update(
&u[0], i, NULL, DOMID_SELF)) != 0)
---- head-2009-05-19.orig/arch/x86/mm/init_32-xen.c 2008-10-29 09:55:56.000000000 +0100
-+++ head-2009-05-19/arch/x86/mm/init_32-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/mm/init_32-xen.c 2008-10-29 09:55:56.000000000 +0100
++++ head-2009-06-09/arch/x86/mm/init_32-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -462,16 +462,22 @@ EXPORT_SYMBOL(__supported_pte_mask);
* on Enable
* off Disable
@@ -4111,8 +4111,8 @@ Acked-by: jbeulich@novell.com
unsigned long start_pfn = start >> PAGE_SHIFT;
unsigned long nr_pages = size >> PAGE_SHIFT;
---- head-2009-05-19.orig/arch/x86/mm/ioremap_32-xen.c 2008-04-02 12:34:02.000000000 +0200
-+++ head-2009-05-19/arch/x86/mm/ioremap_32-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/mm/ioremap_32-xen.c 2008-04-02 12:34:02.000000000 +0200
++++ head-2009-06-09/arch/x86/mm/ioremap_32-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -12,7 +12,7 @@
#include <linux/init.h>
#include <linux/slab.h>
@@ -4160,8 +4160,8 @@ Acked-by: jbeulich@novell.com
vunmap((void __force *) addr);
return NULL;
}
---- head-2009-05-19.orig/arch/x86/mm/pgtable_32-xen.c 2009-03-18 10:39:31.000000000 +0100
-+++ head-2009-05-19/arch/x86/mm/pgtable_32-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/mm/pgtable_32-xen.c 2009-03-18 10:39:31.000000000 +0100
++++ head-2009-06-09/arch/x86/mm/pgtable_32-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -68,7 +68,9 @@ void show_mem(void)
printk(KERN_INFO "%lu pages writeback\n",
global_page_state(NR_WRITEBACK));
@@ -4217,8 +4217,8 @@ Acked-by: jbeulich@novell.com
}
pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
---- head-2009-05-19.orig/arch/x86/pci/irq-xen.c 2008-03-06 08:54:32.000000000 +0100
-+++ head-2009-05-19/arch/x86/pci/irq-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/pci/irq-xen.c 2008-03-06 08:54:32.000000000 +0100
++++ head-2009-06-09/arch/x86/pci/irq-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -991,10 +991,6 @@ static void __init pcibios_fixup_irqs(vo
pci_name(bridge), 'A' + pin, irq);
}
@@ -4275,8 +4275,8 @@ Acked-by: jbeulich@novell.com
-
- return count;
-}
---- head-2009-05-19.orig/arch/x86/ia32/ia32entry-xen.S 2008-04-02 12:34:02.000000000 +0200
-+++ head-2009-05-19/arch/x86/ia32/ia32entry-xen.S 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/ia32/ia32entry-xen.S 2008-04-02 12:34:02.000000000 +0200
++++ head-2009-06-09/arch/x86/ia32/ia32entry-xen.S 2009-06-09 15:35:38.000000000 +0200
@@ -83,6 +83,7 @@
*/
ENTRY(ia32_sysenter_target)
@@ -4326,9 +4326,9 @@ Acked-by: jbeulich@novell.com
.quad compat_sys_move_pages
+ .quad sys_getcpu
ia32_syscall_end:
---- head-2009-05-19.orig/arch/x86/kernel/Makefile 2009-05-19 09:48:36.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/Makefile 2009-05-19 09:48:43.000000000 +0200
-@@ -113,7 +113,7 @@ obj-$(CONFIG_X86_XEN) += fixup.o
+--- head-2009-06-09.orig/arch/x86/kernel/Makefile 2009-06-09 15:32:17.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/Makefile 2009-06-09 15:35:38.000000000 +0200
+@@ -114,7 +114,7 @@ obj-$(CONFIG_X86_XEN) += fixup.o
###
# 64 bit specific files
ifeq ($(CONFIG_X86_64),y)
@@ -4337,7 +4337,7 @@ Acked-by: jbeulich@novell.com
obj-$(CONFIG_X86_UV) += tlb_uv.o bios_uv.o uv_irq.o uv_sysfs.o uv_time.o
obj-$(CONFIG_X86_PM_TIMER) += pmtimer_64.o
obj-$(CONFIG_AUDIT) += audit_64.o
-@@ -129,5 +129,7 @@ ifeq ($(CONFIG_X86_64),y)
+@@ -130,5 +130,7 @@ ifeq ($(CONFIG_X86_64),y)
pci-dma_64-$(CONFIG_XEN) += pci-dma_32.o
endif
@@ -4346,8 +4346,8 @@ Acked-by: jbeulich@novell.com
+ smpboot_$(BITS).o tsc_$(BITS).o
+disabled-obj-$(CONFIG_XEN_UNPRIVILEGED_GUEST) += mpparse_64.o
%/head_$(BITS).o %/head_$(BITS).s: $(if $(CONFIG_XEN),EXTRA_AFLAGS,dummy) :=
---- head-2009-05-19.orig/arch/x86/kernel/apic_64-xen.c 2007-06-12 13:13:01.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/apic_64-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/apic_64-xen.c 2007-06-12 13:13:01.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/apic_64-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -43,7 +43,7 @@ int apic_verbosity;
*/
void ack_bad_irq(unsigned int irq)
@@ -4413,8 +4413,8 @@ Acked-by: jbeulich@novell.com
#endif
return 1;
---- head-2009-05-19.orig/arch/x86/kernel/e820_64-xen.c 2008-04-22 19:56:27.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/e820_64-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/e820_64-xen.c 2008-04-22 19:56:27.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/e820_64-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -16,6 +16,7 @@
#include <linux/string.h>
#include <linux/kexec.h>
@@ -4895,8 +4895,8 @@ Acked-by: jbeulich@novell.com
}
unsigned long pci_mem_start = 0xaeedbabe;
---- head-2009-05-19.orig/arch/x86/kernel/early_printk-xen.c 2007-06-12 13:13:01.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/early_printk-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/early_printk-xen.c 2007-06-12 13:13:01.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/early_printk-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -244,20 +244,16 @@ void early_printk(const char *fmt, ...)
static int __initdata keep_early;
@@ -4943,8 +4943,8 @@ Acked-by: jbeulich@novell.com
}
-__setup("earlyprintk=", setup_early_printk);
---- head-2009-05-19.orig/arch/x86/kernel/entry_64-xen.S 2008-10-29 09:55:56.000000000 +0100
-+++ head-2009-05-19/arch/x86/kernel/entry_64-xen.S 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/entry_64-xen.S 2008-10-29 09:55:56.000000000 +0100
++++ head-2009-06-09/arch/x86/kernel/entry_64-xen.S 2009-06-09 15:35:38.000000000 +0200
@@ -4,9 +4,6 @@
* Copyright (C) 1991, 1992 Linus Torvalds
* Copyright (C) 2000, 2001, 2002 Andi Kleen SuSE Labs
@@ -5187,8 +5187,8 @@ Acked-by: jbeulich@novell.com
ENTRY(alignment_check)
errorentry do_alignment_check
---- head-2009-05-19.orig/arch/x86/kernel/head_64-xen.S 2007-08-06 15:10:49.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/head_64-xen.S 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/head_64-xen.S 2007-08-06 15:10:49.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/head_64-xen.S 2009-06-09 15:35:38.000000000 +0200
@@ -5,9 +5,6 @@
* Copyright (C) 2000 Pavel Machek <pavel@suse.cz>
* Copyright (C) 2000 Karsten Keil <kkeil@suse.de>
@@ -5208,8 +5208,8 @@ Acked-by: jbeulich@novell.com
gdt_end:
/* asm/segment.h:GDT_ENTRIES must match this */
/* This should be a multiple of the cache line size */
---- head-2009-05-19.orig/arch/x86/kernel/head64-xen.c 2007-06-12 13:13:01.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/head64-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/head64-xen.c 2007-06-12 13:13:01.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/head64-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -7,6 +7,9 @@
* Modified for Xen.
*/
@@ -5301,8 +5301,8 @@ Acked-by: jbeulich@novell.com
- setup_boot_cpu_data();
start_kernel();
}
---- head-2009-05-19.orig/arch/x86/kernel/io_apic_64-xen.c 2009-03-18 10:39:31.000000000 +0100
-+++ head-2009-05-19/arch/x86/kernel/io_apic_64-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/io_apic_64-xen.c 2009-03-18 10:39:31.000000000 +0100
++++ head-2009-06-09/arch/x86/kernel/io_apic_64-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -26,9 +26,12 @@
#include <linux/delay.h>
#include <linux/sched.h>
@@ -7002,8 +7002,8 @@ Acked-by: jbeulich@novell.com
spin_unlock_irqrestore(&ioapic_lock, flags);
return 0;
---- head-2009-05-19.orig/arch/x86/kernel/ioport_64-xen.c 2008-01-28 12:24:19.000000000 +0100
-+++ head-2009-05-19/arch/x86/kernel/ioport_64-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/ioport_64-xen.c 2008-01-28 12:24:19.000000000 +0100
++++ head-2009-06-09/arch/x86/kernel/ioport_64-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -58,6 +58,7 @@ asmlinkage long sys_ioperm(unsigned long
memset(bitmap, 0xff, IO_BITMAP_BYTES);
@@ -7012,8 +7012,8 @@ Acked-by: jbeulich@novell.com
set_xen_guest_handle(set_iobitmap.bitmap, (char *)bitmap);
set_iobitmap.nr_ports = IO_BITMAP_BITS;
---- head-2009-05-19.orig/arch/x86/kernel/irq_64-xen.c 2008-10-29 09:55:56.000000000 +0100
-+++ head-2009-05-19/arch/x86/kernel/irq_64-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/irq_64-xen.c 2008-10-29 09:55:56.000000000 +0100
++++ head-2009-06-09/arch/x86/kernel/irq_64-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -20,11 +20,6 @@
#include <asm/idle.h>
@@ -7093,8 +7093,8 @@ Acked-by: jbeulich@novell.com
+ printk("unexpected IRQ trap at irq %02x\n", irq);
}
#endif
---- head-2009-05-19.orig/arch/x86/kernel/mpparse_64-xen.c 2007-06-12 13:13:01.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/mpparse_64-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/mpparse_64-xen.c 2007-06-12 13:13:01.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/mpparse_64-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -41,8 +41,7 @@ int acpi_found_madt;
* Various Linux-internal data structures created from the
* MP-table.
@@ -7708,8 +7708,8 @@ Acked-by: jbeulich@novell.com
-
-#endif /*CONFIG_X86_IO_APIC*/
#endif /*CONFIG_ACPI*/
---- head-2009-05-19.orig/arch/x86/kernel/process_64-xen.c 2008-08-07 12:44:36.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/process_64-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/process_64-xen.c 2008-08-07 12:44:36.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/process_64-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -89,25 +89,24 @@ void idle_notifier_unregister(struct not
}
EXPORT_SYMBOL(idle_notifier_unregister);
@@ -7916,8 +7916,8 @@ Acked-by: jbeulich@novell.com
sp -= get_random_int() % 8192;
return sp & ~0xf;
}
---- head-2009-05-19.orig/arch/x86/kernel/setup_64-xen.c 2009-05-19 09:16:41.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/setup_64-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/setup_64-xen.c 2009-05-19 09:16:41.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/setup_64-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -88,9 +88,6 @@ extern struct edid_info edid_info;
shared_info_t *HYPERVISOR_shared_info = (shared_info_t *)empty_zero_page;
EXPORT_SYMBOL(HYPERVISOR_shared_info);
@@ -8351,8 +8351,8 @@ Acked-by: jbeulich@novell.com
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* VIA/Cyrix/Centaur-defined */
---- head-2009-05-19.orig/arch/x86/kernel/setup64-xen.c 2009-05-19 09:48:36.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/setup64-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/setup64-xen.c 2009-06-09 15:32:17.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/setup64-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -31,7 +31,7 @@
#include <asm/hypervisor.h>
#endif
@@ -8446,8 +8446,8 @@ Acked-by: jbeulich@novell.com
orig_ist->ist[v] = t->ist[v] = (unsigned long)estacks;
}
---- head-2009-05-19.orig/arch/x86/kernel/smp_64-xen.c 2008-04-02 12:34:02.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/smp_64-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/smp_64-xen.c 2008-04-02 12:34:02.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/smp_64-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -381,9 +381,8 @@ int smp_call_function_single (int cpu, v
/* prevent preemption and reschedule on another processor */
int me = get_cpu();
@@ -8509,8 +8509,8 @@ Acked-by: jbeulich@novell.com
- return 0; /* Should not happen */
-#endif
-}
---- head-2009-05-19.orig/arch/x86/kernel/traps_64-xen.c 2008-04-02 12:34:02.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/traps_64-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/traps_64-xen.c 2008-04-02 12:34:02.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/traps_64-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -23,6 +23,7 @@
#include <linux/delay.h>
#include <linux/spinlock.h>
@@ -8966,8 +8966,8 @@ Acked-by: jbeulich@novell.com
-__setup("call_trace=", call_trace_setup);
+early_param("call_trace", call_trace_setup);
#endif
---- head-2009-05-19.orig/arch/x86/kernel/vsyscall_64-xen.c 2007-06-18 08:38:13.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/vsyscall_64-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/vsyscall_64-xen.c 2007-06-18 08:38:13.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/vsyscall_64-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -26,6 +26,10 @@
#include <linux/seqlock.h>
#include <linux/jiffies.h>
@@ -9161,8 +9161,8 @@ Acked-by: jbeulich@novell.com
return 0;
}
---- head-2009-05-19.orig/arch/x86/mm/fault_64-xen.c 2007-11-02 17:34:23.000000000 +0100
-+++ head-2009-05-19/arch/x86/mm/fault_64-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/mm/fault_64-xen.c 2007-11-02 17:34:23.000000000 +0100
++++ head-2009-06-09/arch/x86/mm/fault_64-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -40,8 +40,7 @@
#define PF_RSVD (1<<3)
#define PF_INSTR (1<<4)
@@ -9300,8 +9300,8 @@ Acked-by: jbeulich@novell.com
}
spin_unlock(&pgd_lock);
set_bit(pgd_index(address), insync);
---- head-2009-05-19.orig/arch/x86/mm/init_64-xen.c 2008-10-29 09:55:56.000000000 +0100
-+++ head-2009-05-19/arch/x86/mm/init_64-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/mm/init_64-xen.c 2009-06-09 15:01:37.000000000 +0200
++++ head-2009-06-09/arch/x86/mm/init_64-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -61,8 +61,6 @@ EXPORT_SYMBOL(__kernel_page_user);
int after_bootmem;
@@ -9607,8 +9607,8 @@ Acked-by: jbeulich@novell.com
}
int kern_addr_valid(unsigned long addr)
---- head-2009-05-19.orig/arch/x86/mm/pageattr_64-xen.c 2009-03-18 10:39:31.000000000 +0100
-+++ head-2009-05-19/arch/x86/mm/pageattr_64-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/mm/pageattr_64-xen.c 2009-03-18 10:39:31.000000000 +0100
++++ head-2009-06-09/arch/x86/mm/pageattr_64-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -377,8 +377,8 @@ static void revert_page(unsigned long ad
BUG_ON(pud_none(*pud));
pmd = pmd_offset(pud, address);
@@ -9673,8 +9673,8 @@ Acked-by: jbeulich@novell.com
}
}
up_write(&init_mm.mmap_sem);
---- head-2009-05-19.orig/drivers/char/tpm/tpm_xen.c 2009-05-19 09:44:03.000000000 +0200
-+++ head-2009-05-19/drivers/char/tpm/tpm_xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/char/tpm/tpm_xen.c 2009-06-09 15:22:27.000000000 +0200
++++ head-2009-06-09/drivers/char/tpm/tpm_xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -85,8 +85,7 @@ static struct tpm_private *my_priv;
/* local function prototypes */
@@ -9694,9 +9694,9 @@ Acked-by: jbeulich@novell.com
{
struct tpm_private *tp = tpm_priv;
unsigned long flags;
---- head-2009-05-19.orig/drivers/pci/Kconfig 2009-05-19 09:42:46.000000000 +0200
-+++ head-2009-05-19/drivers/pci/Kconfig 2009-05-19 09:48:43.000000000 +0200
-@@ -61,7 +61,7 @@ config PCI_STUB
+--- head-2009-06-09.orig/drivers/pci/Kconfig 2009-05-29 11:22:09.000000000 +0200
++++ head-2009-06-09/drivers/pci/Kconfig 2009-06-09 15:35:38.000000000 +0200
+@@ -75,7 +75,7 @@ config PCI_STUB
config HT_IRQ
bool "Interrupts on hypertransport devices"
default y
@@ -9705,8 +9705,8 @@ Acked-by: jbeulich@novell.com
help
This allows native hypertransport devices to use interrupts.
---- head-2009-05-19.orig/drivers/pci/msi-xen.c 2009-04-07 16:06:58.000000000 +0200
-+++ head-2009-05-19/drivers/pci/msi-xen.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/pci/msi-xen.c 2009-04-07 16:06:58.000000000 +0200
++++ head-2009-06-09/drivers/pci/msi-xen.c 2009-06-09 15:35:38.000000000 +0200
@@ -6,6 +6,7 @@
* Copyright (C) Tom Long Nguyen (tom.l.nguyen@intel.com)
*/
@@ -9938,9 +9938,9 @@ Acked-by: jbeulich@novell.com
* allocated for this device function, are reclaimed to unused state,
* which may be used later on.
**/
---- head-2009-05-19.orig/drivers/xen/Kconfig 2009-05-19 09:48:33.000000000 +0200
-+++ head-2009-05-19/drivers/xen/Kconfig 2009-05-19 09:48:43.000000000 +0200
-@@ -310,6 +310,9 @@ endmenu
+--- head-2009-06-09.orig/drivers/xen/Kconfig 2009-06-09 15:32:15.000000000 +0200
++++ head-2009-06-09/drivers/xen/Kconfig 2009-06-09 15:35:38.000000000 +0200
+@@ -327,6 +327,9 @@ endmenu
config HAVE_IRQ_IGNORE_UNHANDLED
def_bool y
@@ -9950,8 +9950,8 @@ Acked-by: jbeulich@novell.com
config NO_IDLE_HZ
def_bool y
---- head-2009-05-19.orig/drivers/xen/balloon/balloon.c 2009-03-18 10:39:31.000000000 +0100
-+++ head-2009-05-19/drivers/xen/balloon/balloon.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/balloon/balloon.c 2009-06-09 15:01:37.000000000 +0200
++++ head-2009-06-09/drivers/xen/balloon/balloon.c 2009-06-09 15:35:38.000000000 +0200
@@ -84,7 +84,7 @@ static unsigned long frame_list[PAGE_SIZ
/* VM /proc information for memory */
extern unsigned long totalram_pages;
@@ -9961,9 +9961,9 @@ Acked-by: jbeulich@novell.com
extern unsigned long totalhigh_pages;
#define inc_totalhigh_pages() (totalhigh_pages++)
#define dec_totalhigh_pages() (totalhigh_pages--)
---- head-2009-05-19.orig/drivers/xen/blkback/blkback.c 2009-03-18 10:39:31.000000000 +0100
-+++ head-2009-05-19/drivers/xen/blkback/blkback.c 2009-05-19 09:48:43.000000000 +0200
-@@ -288,7 +288,7 @@ static void blkif_notify_work(blkif_t *b
+--- head-2009-06-09.orig/drivers/xen/blkback/blkback.c 2009-05-29 10:25:53.000000000 +0200
++++ head-2009-06-09/drivers/xen/blkback/blkback.c 2009-06-09 15:35:38.000000000 +0200
+@@ -289,7 +289,7 @@ static void blkif_notify_work(blkif_t *b
wake_up(&blkif->wq);
}
@@ -9972,9 +9972,9 @@ Acked-by: jbeulich@novell.com
{
blkif_notify_work(dev_id);
return IRQ_HANDLED;
---- head-2009-05-19.orig/drivers/xen/blkback/common.h 2008-05-08 14:02:04.000000000 +0200
-+++ head-2009-05-19/drivers/xen/blkback/common.h 2009-05-19 09:48:43.000000000 +0200
-@@ -130,7 +130,7 @@ void blkif_interface_init(void);
+--- head-2009-06-09.orig/drivers/xen/blkback/common.h 2009-06-09 15:01:37.000000000 +0200
++++ head-2009-06-09/drivers/xen/blkback/common.h 2009-06-09 15:35:38.000000000 +0200
+@@ -132,7 +132,7 @@ void blkif_interface_init(void);
void blkif_xenbus_init(void);
@@ -9983,8 +9983,8 @@ Acked-by: jbeulich@novell.com
int blkif_schedule(void *arg);
int blkback_barrier(struct xenbus_transaction xbt,
---- head-2009-05-19.orig/drivers/xen/blkfront/blkfront.c 2009-03-18 10:39:31.000000000 +0100
-+++ head-2009-05-19/drivers/xen/blkfront/blkfront.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/blkfront/blkfront.c 2009-03-18 10:39:31.000000000 +0100
++++ head-2009-06-09/drivers/xen/blkfront/blkfront.c 2009-06-09 15:35:38.000000000 +0200
@@ -70,7 +70,7 @@ static int setup_blkring(struct xenbus_d
static void kick_pending_request_queues(struct blkfront_info *);
@@ -10003,8 +10003,8 @@ Acked-by: jbeulich@novell.com
{
struct request *req;
blkif_response_t *bret;
---- head-2009-05-19.orig/drivers/xen/blktap/blktap.c 2009-05-19 09:16:41.000000000 +0200
-+++ head-2009-05-19/drivers/xen/blktap/blktap.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/blktap/blktap.c 2009-05-29 10:25:53.000000000 +0200
++++ head-2009-06-09/drivers/xen/blktap/blktap.c 2009-06-09 15:35:38.000000000 +0200
@@ -1262,7 +1262,7 @@ static void blkif_notify_work(blkif_t *b
wake_up(&blkif->wq);
}
@@ -10014,8 +10014,8 @@ Acked-by: jbeulich@novell.com
{
blkif_notify_work(dev_id);
return IRQ_HANDLED;
---- head-2009-05-19.orig/drivers/xen/blktap/common.h 2008-09-15 13:40:15.000000000 +0200
-+++ head-2009-05-19/drivers/xen/blktap/common.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/blktap/common.h 2008-09-15 13:40:15.000000000 +0200
++++ head-2009-06-09/drivers/xen/blktap/common.h 2009-06-09 15:35:38.000000000 +0200
@@ -113,7 +113,7 @@ void tap_blkif_interface_init(void);
void tap_blkif_xenbus_init(void);
@@ -10025,8 +10025,59 @@ Acked-by: jbeulich@novell.com
int tap_blkif_schedule(void *arg);
int dom_to_devid(domid_t domid, int xenbus_id, blkif_t *blkif);
---- head-2009-05-19.orig/drivers/xen/console/console.c 2009-05-19 09:48:36.000000000 +0200
-+++ head-2009-05-19/drivers/xen/console/console.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/blktap2/sysfs.c 2009-06-09 15:01:37.000000000 +0200
++++ head-2009-06-09/drivers/xen/blktap2/sysfs.c 2009-06-09 15:35:38.000000000 +0200
+@@ -150,7 +150,7 @@ blktap_sysfs_pause_device(struct class_d
+ err = blktap_device_pause(tap);
+ if (!err) {
+ class_device_remove_file(dev, &class_device_attr_pause);
+- class_device_create_file(dev, &class_device_attr_resume);
++ err = class_device_create_file(dev, &class_device_attr_resume);
+ }
+
+ out:
+@@ -182,7 +182,7 @@ blktap_sysfs_resume_device(struct class_
+ err = blktap_device_resume(tap);
+ if (!err) {
+ class_device_remove_file(dev, &class_device_attr_resume);
+- class_device_create_file(dev, &class_device_attr_pause);
++ err = class_device_create_file(dev, &class_device_attr_pause);
+ }
+
+ out:
+@@ -310,10 +310,13 @@ blktap_sysfs_create(struct blktap *tap)
+ atomic_set(&ring->sysfs_refcnt, 0);
+ set_bit(BLKTAP_SYSFS, &tap->dev_inuse);
+
+- class_device_create_file(dev, &class_device_attr_name);
+- class_device_create_file(dev, &class_device_attr_remove);
+- class_device_create_file(dev, &class_device_attr_pause);
+- class_device_create_file(dev, &class_device_attr_debug);
++ if (class_device_create_file(dev, &class_device_attr_name) ||
++ class_device_create_file(dev, &class_device_attr_remove) ||
++ class_device_create_file(dev, &class_device_attr_pause) ||
++ class_device_create_file(dev, &class_device_attr_debug))
++ printk(KERN_WARNING
++ "One or more attibute files not created for blktap%d\n",
++ tap->minor);
+
+ return 0;
+ }
+@@ -417,8 +420,10 @@ blktap_sysfs_init(void)
+ if (IS_ERR(cls))
+ return PTR_ERR(cls);
+
+- class_create_file(cls, &class_attr_verbosity);
+- class_create_file(cls, &class_attr_devices);
++ if (class_create_file(cls, &class_attr_verbosity) ||
++ class_create_file(cls, &class_attr_devices))
++ printk(KERN_WARNING "blktap2: One or more "
++ "class attribute files could not be created.\n");
+
+ class = cls;
+ return 0;
+--- head-2009-06-09.orig/drivers/xen/console/console.c 2009-06-09 15:32:17.000000000 +0200
++++ head-2009-06-09/drivers/xen/console/console.c 2009-06-09 15:35:38.000000000 +0200
@@ -360,7 +360,7 @@ static struct tty_struct *xencons_tty;
static int xencons_priv_irq;
static char x_char;
@@ -10072,8 +10123,8 @@ Acked-by: jbeulich@novell.com
.open = xencons_open,
.close = xencons_close,
.write = xencons_write,
---- head-2009-05-19.orig/drivers/xen/console/xencons_ring.c 2007-06-12 13:13:44.000000000 +0200
-+++ head-2009-05-19/drivers/xen/console/xencons_ring.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/console/xencons_ring.c 2007-06-12 13:13:44.000000000 +0200
++++ head-2009-06-09/drivers/xen/console/xencons_ring.c 2009-06-09 15:35:38.000000000 +0200
@@ -83,7 +83,7 @@ int xencons_ring_send(const char *data,
return sent;
}
@@ -10092,8 +10143,8 @@ Acked-by: jbeulich@novell.com
cons++;
}
---- head-2009-05-19.orig/drivers/xen/core/evtchn.c 2009-03-18 10:39:31.000000000 +0100
-+++ head-2009-05-19/drivers/xen/core/evtchn.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/core/evtchn.c 2009-03-18 10:39:31.000000000 +0100
++++ head-2009-06-09/drivers/xen/core/evtchn.c 2009-06-09 15:35:38.000000000 +0200
@@ -516,7 +516,7 @@ static void unbind_from_irq(unsigned int
int bind_caller_port_to_irqhandler(
@@ -10274,8 +10325,8 @@ Acked-by: jbeulich@novell.com
+ handle_level_irq, "level");
}
}
---- head-2009-05-19.orig/drivers/xen/core/reboot.c 2008-08-07 12:44:36.000000000 +0200
-+++ head-2009-05-19/drivers/xen/core/reboot.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/core/reboot.c 2008-08-07 12:44:36.000000000 +0200
++++ head-2009-06-09/drivers/xen/core/reboot.c 2009-06-09 15:35:38.000000000 +0200
@@ -14,6 +14,7 @@
#ifdef HAVE_XEN_PLATFORM_COMPAT_H
@@ -10302,8 +10353,8 @@ Acked-by: jbeulich@novell.com
{
switch_shutdown_state(SHUTDOWN_SUSPEND);
return IRQ_HANDLED;
---- head-2009-05-19.orig/drivers/xen/core/smpboot.c 2009-05-19 09:16:41.000000000 +0200
-+++ head-2009-05-19/drivers/xen/core/smpboot.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/core/smpboot.c 2009-05-19 09:16:41.000000000 +0200
++++ head-2009-06-09/drivers/xen/core/smpboot.c 2009-06-09 15:35:38.000000000 +0200
@@ -25,8 +25,8 @@
#include <xen/cpu_hotplug.h>
#include <xen/xenbus.h>
@@ -10324,8 +10375,8 @@ Acked-by: jbeulich@novell.com
#endif
void __init prefill_possible_map(void)
---- head-2009-05-19.orig/drivers/xen/fbfront/xenfb.c 2009-03-18 10:39:32.000000000 +0100
-+++ head-2009-05-19/drivers/xen/fbfront/xenfb.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/fbfront/xenfb.c 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/drivers/xen/fbfront/xenfb.c 2009-06-09 15:35:38.000000000 +0200
@@ -524,8 +524,7 @@ static struct fb_ops xenfb_fb_ops = {
.fb_set_par = xenfb_set_par,
};
@@ -10336,8 +10387,8 @@ Acked-by: jbeulich@novell.com
{
/*
* No in events recognized, simply ignore them all.
---- head-2009-05-19.orig/drivers/xen/fbfront/xenkbd.c 2008-04-02 12:34:02.000000000 +0200
-+++ head-2009-05-19/drivers/xen/fbfront/xenkbd.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/fbfront/xenkbd.c 2008-04-02 12:34:02.000000000 +0200
++++ head-2009-06-09/drivers/xen/fbfront/xenkbd.c 2009-06-09 15:35:38.000000000 +0200
@@ -46,7 +46,7 @@ static void xenkbd_disconnect_backend(st
* to do that.
*/
@@ -10347,8 +10398,8 @@ Acked-by: jbeulich@novell.com
{
struct xenkbd_info *info = dev_id;
struct xenkbd_page *page = info->page;
---- head-2009-05-19.orig/drivers/xen/gntdev/gntdev.c 2009-03-18 10:39:32.000000000 +0100
-+++ head-2009-05-19/drivers/xen/gntdev/gntdev.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/gntdev/gntdev.c 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/drivers/xen/gntdev/gntdev.c 2009-06-09 15:35:38.000000000 +0200
@@ -752,9 +752,6 @@ static pte_t gntdev_clear_pte(struct vm_
BUG();
}
@@ -10388,8 +10439,8 @@ Acked-by: jbeulich@novell.com
}
return copy;
---- head-2009-05-19.orig/drivers/xen/netback/accel.c 2008-01-07 13:19:18.000000000 +0100
-+++ head-2009-05-19/drivers/xen/netback/accel.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/netback/accel.c 2008-01-07 13:19:18.000000000 +0100
++++ head-2009-06-09/drivers/xen/netback/accel.c 2009-06-09 15:35:38.000000000 +0200
@@ -65,7 +65,7 @@ static int match_accelerator(struct xenb
if (IS_ERR(eth_name)) {
@@ -10399,8 +10450,8 @@ Acked-by: jbeulich@novell.com
__FUNCTION__, PTR_ERR(eth_name));
return 0;
} else {
---- head-2009-05-19.orig/drivers/xen/netback/common.h 2009-03-18 10:39:32.000000000 +0100
-+++ head-2009-05-19/drivers/xen/netback/common.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/netback/common.h 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/drivers/xen/netback/common.h 2009-06-09 15:35:38.000000000 +0200
@@ -203,7 +203,7 @@ void netif_deschedule_work(netif_t *neti
int netif_be_start_xmit(struct sk_buff *skb, struct net_device *dev);
@@ -10410,8 +10461,8 @@ Acked-by: jbeulich@novell.com
static inline int netbk_can_queue(struct net_device *dev)
{
---- head-2009-05-19.orig/drivers/xen/netback/loopback.c 2007-08-06 15:10:49.000000000 +0200
-+++ head-2009-05-19/drivers/xen/netback/loopback.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/netback/loopback.c 2007-08-06 15:10:49.000000000 +0200
++++ head-2009-06-09/drivers/xen/netback/loopback.c 2009-06-09 15:35:38.000000000 +0200
@@ -151,7 +151,7 @@ static int loopback_start_xmit(struct sk
np->stats.rx_bytes += skb->len;
np->stats.rx_packets++;
@@ -10421,9 +10472,9 @@ Acked-by: jbeulich@novell.com
/* Defer checksum calculation. */
skb->proto_csum_blank = 1;
/* Must be a local packet: assert its integrity. */
---- head-2009-05-19.orig/drivers/xen/netback/netback.c 2009-03-18 10:39:32.000000000 +0100
-+++ head-2009-05-19/drivers/xen/netback/netback.c 2009-05-19 09:48:43.000000000 +0200
-@@ -692,7 +692,7 @@ static void net_rx_action(unsigned long
+--- head-2009-06-09.orig/drivers/xen/netback/netback.c 2009-05-29 10:25:53.000000000 +0200
++++ head-2009-06-09/drivers/xen/netback/netback.c 2009-06-09 15:35:38.000000000 +0200
+@@ -695,7 +695,7 @@ static void net_rx_action(unsigned long
id = meta[npo.meta_cons].id;
flags = nr_frags ? NETRXF_more_data : 0;
@@ -10432,7 +10483,7 @@ Acked-by: jbeulich@novell.com
flags |= NETRXF_csum_blank | NETRXF_data_validated;
else if (skb->proto_data_valid) /* remote but checksummed? */
flags |= NETRXF_data_validated;
-@@ -1463,7 +1463,7 @@ static void netif_page_release(struct pa
+@@ -1488,7 +1488,7 @@ static void netif_page_release(struct pa
netif_idx_release(idx);
}
@@ -10441,7 +10492,7 @@ Acked-by: jbeulich@novell.com
{
netif_t *netif = dev_id;
-@@ -1530,7 +1530,7 @@ static netif_rx_response_t *make_rx_resp
+@@ -1555,7 +1555,7 @@ static netif_rx_response_t *make_rx_resp
}
#ifdef NETBE_DEBUG_INTERRUPT
@@ -10450,8 +10501,8 @@ Acked-by: jbeulich@novell.com
{
struct list_head *ent;
netif_t *netif;
---- head-2009-05-19.orig/drivers/xen/netfront/netfront.c 2009-04-07 13:58:48.000000000 +0200
-+++ head-2009-05-19/drivers/xen/netfront/netfront.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/netfront/netfront.c 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/netfront/netfront.c 2009-06-09 15:35:38.000000000 +0200
@@ -136,7 +136,7 @@ static inline int netif_needs_gso(struct
{
return skb_is_gso(skb) &&
@@ -10488,8 +10539,8 @@ Acked-by: jbeulich@novell.com
{
struct net_device *dev = dev_id;
struct netfront_info *np = netdev_priv(dev);
---- head-2009-05-19.orig/drivers/xen/pciback/pciback.h 2009-03-18 10:39:32.000000000 +0100
-+++ head-2009-05-19/drivers/xen/pciback/pciback.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/pciback/pciback.h 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/drivers/xen/pciback/pciback.h 2009-06-09 15:35:38.000000000 +0200
@@ -99,7 +99,7 @@ int pciback_publish_pci_roots(struct pci
void pciback_release_devices(struct pciback_device *pdev);
@@ -10499,8 +10550,8 @@ Acked-by: jbeulich@novell.com
void pciback_do_op(void *data);
int pciback_xenbus_register(void);
---- head-2009-05-19.orig/drivers/xen/pciback/pciback_ops.c 2009-03-18 10:39:32.000000000 +0100
-+++ head-2009-05-19/drivers/xen/pciback/pciback_ops.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/pciback/pciback_ops.c 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/drivers/xen/pciback/pciback_ops.c 2009-06-09 15:35:38.000000000 +0200
@@ -124,7 +124,7 @@ void pciback_do_op(void *data)
test_and_schedule_op(pdev);
}
@@ -10510,8 +10561,8 @@ Acked-by: jbeulich@novell.com
{
struct pciback_device *pdev = dev_id;
---- head-2009-05-19.orig/drivers/xen/pcifront/pcifront.h 2009-03-18 10:39:32.000000000 +0100
-+++ head-2009-05-19/drivers/xen/pcifront/pcifront.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/pcifront/pcifront.h 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/drivers/xen/pcifront/pcifront.h 2009-06-09 15:35:38.000000000 +0200
@@ -50,6 +50,6 @@ void pcifront_free_roots(struct pcifront
void pcifront_do_aer( void *data);
@@ -10520,8 +10571,8 @@ Acked-by: jbeulich@novell.com
+irqreturn_t pcifront_handler_aer(int irq, void *dev);
#endif /* __XEN_PCIFRONT_H__ */
---- head-2009-05-19.orig/drivers/xen/pcifront/pci_op.c 2009-03-18 10:39:32.000000000 +0100
-+++ head-2009-05-19/drivers/xen/pcifront/pci_op.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/pcifront/pci_op.c 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/drivers/xen/pcifront/pci_op.c 2009-06-09 15:35:38.000000000 +0200
@@ -530,10 +530,16 @@ int __devinit pcifront_rescan_root(struc
d = pci_scan_single_device(b, devfn);
@@ -10549,8 +10600,8 @@ Acked-by: jbeulich@novell.com
{
struct pcifront_device *pdev = dev;
schedule_pcifront_aer_op(pdev);
---- head-2009-05-19.orig/drivers/xen/privcmd/compat_privcmd.c 2007-07-10 09:42:30.000000000 +0200
-+++ head-2009-05-19/drivers/xen/privcmd/compat_privcmd.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/privcmd/compat_privcmd.c 2007-07-10 09:42:30.000000000 +0200
++++ head-2009-06-09/drivers/xen/privcmd/compat_privcmd.c 2009-06-09 15:35:38.000000000 +0200
@@ -18,7 +18,6 @@
* Authors: Jimi Xenidis <jimix@watson.ibm.com>
*/
@@ -10559,8 +10610,8 @@ Acked-by: jbeulich@novell.com
#include <linux/compat.h>
#include <linux/ioctl.h>
#include <linux/syscalls.h>
---- head-2009-05-19.orig/drivers/xen/privcmd/privcmd.c 2008-07-21 11:00:33.000000000 +0200
-+++ head-2009-05-19/drivers/xen/privcmd/privcmd.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/privcmd/privcmd.c 2008-07-21 11:00:33.000000000 +0200
++++ head-2009-06-09/drivers/xen/privcmd/privcmd.c 2009-06-09 15:35:38.000000000 +0200
@@ -40,7 +40,7 @@ static int privcmd_enforce_singleshot_ma
static long privcmd_ioctl(struct file *file,
unsigned int cmd, unsigned long data)
@@ -10629,8 +10680,8 @@ Acked-by: jbeulich@novell.com
vma->vm_ops = &privcmd_vm_ops;
vma->vm_private_data = NULL;
---- head-2009-05-19.orig/drivers/xen/scsiback/common.h 2009-03-18 10:39:32.000000000 +0100
-+++ head-2009-05-19/drivers/xen/scsiback/common.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/scsiback/common.h 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/drivers/xen/scsiback/common.h 2009-06-09 15:35:38.000000000 +0200
@@ -147,7 +147,7 @@ typedef struct {
#define VSCSI_TYPE_HOST 1
@@ -10640,8 +10691,8 @@ Acked-by: jbeulich@novell.com
int scsiback_init_sring(struct vscsibk_info *info,
unsigned long ring_ref, unsigned int evtchn);
int scsiback_schedule(void *data);
---- head-2009-05-19.orig/drivers/xen/scsiback/scsiback.c 2009-03-18 10:39:32.000000000 +0100
-+++ head-2009-05-19/drivers/xen/scsiback/scsiback.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/scsiback/scsiback.c 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/drivers/xen/scsiback/scsiback.c 2009-06-09 15:35:38.000000000 +0200
@@ -453,7 +453,7 @@ void scsiback_cmd_exec(pending_req_t *pe
write = (data_dir == DMA_TO_DEVICE);
rq = blk_get_request(pending_req->sdev->request_queue, write, GFP_KERNEL);
@@ -10660,8 +10711,8 @@ Acked-by: jbeulich@novell.com
{
scsiback_notify_work((struct vscsibk_info *)dev_id);
return IRQ_HANDLED;
---- head-2009-05-19.orig/drivers/xen/scsifront/common.h 2009-03-18 10:39:32.000000000 +0100
-+++ head-2009-05-19/drivers/xen/scsifront/common.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/scsifront/common.h 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/drivers/xen/scsifront/common.h 2009-06-09 15:35:38.000000000 +0200
@@ -129,7 +129,7 @@ struct vscsifrnt_info {
int scsifront_xenbus_init(void);
void scsifront_xenbus_unregister(void);
@@ -10671,8 +10722,8 @@ Acked-by: jbeulich@novell.com
int scsifront_cmd_done(struct vscsifrnt_info *info);
---- head-2009-05-19.orig/drivers/xen/scsifront/scsifront.c 2008-07-21 11:00:33.000000000 +0200
-+++ head-2009-05-19/drivers/xen/scsifront/scsifront.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/scsifront/scsifront.c 2008-07-21 11:00:33.000000000 +0200
++++ head-2009-06-09/drivers/xen/scsifront/scsifront.c 2009-06-09 15:35:38.000000000 +0200
@@ -100,7 +100,7 @@ static void scsifront_do_request(struct
notify_remote_via_irq(irq);
}
@@ -10682,8 +10733,8 @@ Acked-by: jbeulich@novell.com
{
scsifront_notify_work((struct vscsifrnt_info *)dev_id);
return IRQ_HANDLED;
---- head-2009-05-19.orig/drivers/xen/sfc_netback/accel_xenbus.c 2009-04-07 13:58:48.000000000 +0200
-+++ head-2009-05-19/drivers/xen/sfc_netback/accel_xenbus.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/sfc_netback/accel_xenbus.c 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netback/accel_xenbus.c 2009-06-09 15:35:38.000000000 +0200
@@ -68,8 +68,7 @@ static void unlink_bend(struct netback_a
@@ -10704,8 +10755,8 @@ Acked-by: jbeulich@novell.com
{
VPRINTK("netirq %d from device %s\n", irq,
((struct xenbus_device *)context)->nodename);
---- head-2009-05-19.orig/drivers/xen/sfc_netfront/accel.h 2009-04-07 13:58:48.000000000 +0200
-+++ head-2009-05-19/drivers/xen/sfc_netfront/accel.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/sfc_netfront/accel.h 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netfront/accel.h 2009-06-09 15:35:38.000000000 +0200
@@ -467,10 +467,8 @@ void netfront_accel_msg_tx_fastpath(netf
u32 ip, u16 port, u8 protocol);
@@ -10719,8 +10770,8 @@ Acked-by: jbeulich@novell.com
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)
extern void netfront_accel_msg_from_bend(struct work_struct *context);
---- head-2009-05-19.orig/drivers/xen/sfc_netfront/accel_msg.c 2009-04-07 13:58:48.000000000 +0200
-+++ head-2009-05-19/drivers/xen/sfc_netfront/accel_msg.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/sfc_netfront/accel_msg.c 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netfront/accel_msg.c 2009-06-09 15:35:38.000000000 +0200
@@ -488,8 +488,7 @@ void netfront_accel_msg_from_bend(void *
}
@@ -10741,8 +10792,8 @@ Acked-by: jbeulich@novell.com
{
netfront_accel_vnic *vnic = (netfront_accel_vnic *)context;
struct net_device *net_dev = vnic->net_dev;
---- head-2009-05-19.orig/drivers/xen/sfc_netfront/accel_tso.c 2008-02-26 10:54:12.000000000 +0100
-+++ head-2009-05-19/drivers/xen/sfc_netfront/accel_tso.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/sfc_netfront/accel_tso.c 2008-02-26 10:54:12.000000000 +0100
++++ head-2009-06-09/drivers/xen/sfc_netfront/accel_tso.c 2009-06-09 15:35:38.000000000 +0200
@@ -363,7 +363,7 @@ int netfront_accel_enqueue_skb_tso(netfr
tso_check_safe(skb);
@@ -10752,8 +10803,8 @@ Acked-by: jbeulich@novell.com
EPRINTK("Trying to TSO send a packet without HW checksum\n");
tso_start(&state, skb);
---- head-2009-05-19.orig/drivers/xen/sfc_netfront/accel_vi.c 2009-04-07 13:58:48.000000000 +0200
-+++ head-2009-05-19/drivers/xen/sfc_netfront/accel_vi.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/sfc_netfront/accel_vi.c 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netfront/accel_vi.c 2009-06-09 15:35:38.000000000 +0200
@@ -461,7 +461,7 @@ netfront_accel_enqueue_skb_multi(netfron
frag_i = -1;
@@ -10772,8 +10823,8 @@ Acked-by: jbeulich@novell.com
/* Set to zero to encourage falcon to work it out for us */
*(u16*)(skb->h.raw + skb->csum) = 0;
}
---- head-2009-05-19.orig/drivers/xen/tpmback/common.h 2007-06-12 13:13:45.000000000 +0200
-+++ head-2009-05-19/drivers/xen/tpmback/common.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/tpmback/common.h 2007-06-12 13:13:45.000000000 +0200
++++ head-2009-06-09/drivers/xen/tpmback/common.h 2009-06-09 15:35:38.000000000 +0200
@@ -61,7 +61,7 @@ void tpmif_deschedule_work(tpmif_t * tpm
void tpmif_xenbus_init(void);
void tpmif_xenbus_exit(void);
@@ -10783,8 +10834,8 @@ Acked-by: jbeulich@novell.com
long int tpmback_get_instance(struct backend_info *bi);
---- head-2009-05-19.orig/drivers/xen/tpmback/tpmback.c 2007-06-12 13:13:45.000000000 +0200
-+++ head-2009-05-19/drivers/xen/tpmback/tpmback.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/tpmback/tpmback.c 2007-06-12 13:13:45.000000000 +0200
++++ head-2009-06-09/drivers/xen/tpmback/tpmback.c 2009-06-09 15:35:38.000000000 +0200
@@ -502,7 +502,7 @@ static ssize_t vtpm_op_read(struct file
list_del(&pak->next);
write_unlock_irqrestore(&dataex.pak_lock, flags);
@@ -10803,8 +10854,8 @@ Acked-by: jbeulich@novell.com
{
tpmif_t *tpmif = (tpmif_t *) dev_id;
---- head-2009-05-19.orig/drivers/xen/usbback/usbback.c 2009-04-07 13:58:49.000000000 +0200
-+++ head-2009-05-19/drivers/xen/usbback/usbback.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/usbback/usbback.c 2009-04-07 13:58:49.000000000 +0200
++++ head-2009-06-09/drivers/xen/usbback/usbback.c 2009-06-09 15:35:38.000000000 +0200
@@ -288,7 +288,7 @@ static void usbbk_notify_work(usbif_t *u
wake_up(&usbif->wq);
}
@@ -10823,8 +10874,8 @@ Acked-by: jbeulich@novell.com
{
pending_req_t *pending_req = (pending_req_t *)urb->context;
---- head-2009-05-19.orig/drivers/xen/usbback/usbback.h 2009-04-07 13:58:49.000000000 +0200
-+++ head-2009-05-19/drivers/xen/usbback/usbback.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/usbback/usbback.h 2009-04-07 13:58:49.000000000 +0200
++++ head-2009-06-09/drivers/xen/usbback/usbback.h 2009-06-09 15:35:38.000000000 +0200
@@ -141,7 +141,7 @@ int usbif_map(usbif_t *usbif, unsigned l
void usbback_xenbus_init(void);
void usbback_xenbus_exit(void);
@@ -10834,8 +10885,8 @@ Acked-by: jbeulich@novell.com
int usbbk_schedule(void *arg);
struct usbstub *find_attached_device(usbif_t *usbif, int port);
struct usbstub *find_grabbed_device(int dom_id, int dev_id, int port);
---- head-2009-05-19.orig/drivers/xen/usbback/usbstub.c 2009-04-07 13:58:49.000000000 +0200
-+++ head-2009-05-19/drivers/xen/usbback/usbstub.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/usbback/usbstub.c 2009-04-07 13:58:49.000000000 +0200
++++ head-2009-06-09/drivers/xen/usbback/usbstub.c 2009-06-09 15:35:38.000000000 +0200
@@ -393,7 +393,7 @@ static ssize_t usbstub_devices_show(stru
DRIVER_ATTR(grabbed_devices, S_IRUSR, usbstub_devices_show, NULL);
@@ -10884,8 +10935,8 @@ Acked-by: jbeulich@novell.com
&driver_attr_grabbed_devices);
usb_deregister(&usbback_usb_driver);
---- head-2009-05-19.orig/drivers/xen/usbfront/usbfront.h 2009-04-07 13:58:49.000000000 +0200
-+++ head-2009-05-19/drivers/xen/usbfront/usbfront.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/usbfront/usbfront.h 2009-04-07 13:58:49.000000000 +0200
++++ head-2009-06-09/drivers/xen/usbfront/usbfront.h 2009-06-09 15:35:38.000000000 +0200
@@ -211,6 +211,6 @@ timer_action(struct usbfront_info *info,
}
}
@@ -10894,8 +10945,8 @@ Acked-by: jbeulich@novell.com
+irqreturn_t xenhcd_int(int irq, void *dev_id);
#endif /* __XEN_USBFRONT_H__ */
---- head-2009-05-19.orig/drivers/xen/usbfront/usbfront-dbg.c 2009-04-07 13:58:49.000000000 +0200
-+++ head-2009-05-19/drivers/xen/usbfront/usbfront-dbg.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/usbfront/usbfront-dbg.c 2009-04-07 13:58:49.000000000 +0200
++++ head-2009-06-09/drivers/xen/usbfront/usbfront-dbg.c 2009-06-09 15:35:38.000000000 +0200
@@ -89,7 +89,9 @@ static CLASS_DEVICE_ATTR(statistics, S_I
static inline void create_debug_file(struct usbfront_info *info)
{
@@ -10907,8 +10958,8 @@ Acked-by: jbeulich@novell.com
}
static inline void remove_debug_file(struct usbfront_info *info)
---- head-2009-05-19.orig/drivers/xen/usbfront/usbfront-q.c 2009-04-07 13:58:49.000000000 +0200
-+++ head-2009-05-19/drivers/xen/usbfront/usbfront-q.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/usbfront/usbfront-q.c 2009-04-07 13:58:49.000000000 +0200
++++ head-2009-06-09/drivers/xen/usbfront/usbfront-q.c 2009-06-09 15:35:38.000000000 +0200
@@ -232,7 +232,7 @@ __acquires(info->lock)
COUNT(info->stats.complete);
}
@@ -10927,19 +10978,19 @@ Acked-by: jbeulich@novell.com
{
xenhcd_notify_work((struct usbfront_info *) dev_id);
return IRQ_HANDLED;
---- head-2009-05-19.orig/drivers/xen/xenbus/xenbus_comms.c 2009-05-19 09:44:31.000000000 +0200
-+++ head-2009-05-19/drivers/xen/xenbus/xenbus_comms.c 2009-05-19 09:48:43.000000000 +0200
-@@ -55,7 +55,7 @@ static DECLARE_WORK(probe_work, xenbus_p
+--- head-2009-06-09.orig/drivers/xen/xenbus/xenbus_comms.c 2009-06-09 15:32:13.000000000 +0200
++++ head-2009-06-09/drivers/xen/xenbus/xenbus_comms.c 2009-06-09 15:35:38.000000000 +0200
+@@ -54,7 +54,7 @@ static DECLARE_WORK(probe_work, xenbus_p
static DECLARE_WAIT_QUEUE_HEAD(xb_waitq);
-static irqreturn_t wake_waiting(int irq, void *unused, struct pt_regs *regs)
+static irqreturn_t wake_waiting(int irq, void *unused)
{
- if (unlikely(xenstored_ready == 0)) {
- xenstored_ready = 1;
---- head-2009-05-19.orig/drivers/xen/xenoprof/xenoprofile.c 2008-09-15 13:40:15.000000000 +0200
-+++ head-2009-05-19/drivers/xen/xenoprof/xenoprofile.c 2009-05-19 09:48:43.000000000 +0200
+ int old, new;
+
+--- head-2009-06-09.orig/drivers/xen/xenoprof/xenoprofile.c 2008-09-15 13:40:15.000000000 +0200
++++ head-2009-06-09/drivers/xen/xenoprof/xenoprofile.c 2009-06-09 15:35:38.000000000 +0200
@@ -194,8 +194,7 @@ done:
oprofile_add_domain_switch(COORDINATOR_DOMAIN);
}
@@ -10950,8 +11001,8 @@ Acked-by: jbeulich@novell.com
{
struct xenoprof_buf * buf;
static unsigned long flag;
---- head-2009-05-19.orig/include/asm-generic/pgtable.h 2009-05-19 09:44:03.000000000 +0200
-+++ head-2009-05-19/include/asm-generic/pgtable.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/include/asm-generic/pgtable.h 2009-06-09 15:22:27.000000000 +0200
++++ head-2009-06-09/include/asm-generic/pgtable.h 2009-06-09 15:35:38.000000000 +0200
@@ -100,7 +100,7 @@ static inline void ptep_set_wrprotect(st
#endif
@@ -10961,8 +11012,8 @@ Acked-by: jbeulich@novell.com
#endif
#ifndef __HAVE_ARCH_PTE_SAME
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/desc_32.h 2008-01-28 12:24:19.000000000 +0100
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/desc_32.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/desc_32.h 2008-01-28 12:24:19.000000000 +0100
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/desc_32.h 2009-06-09 15:35:38.000000000 +0200
@@ -32,52 +32,110 @@ static inline struct desc_struct *get_cp
return (struct desc_struct *)per_cpu(cpu_gdt_descr, cpu).address;
}
@@ -11123,8 +11174,8 @@ Acked-by: jbeulich@novell.com
static inline void clear_LDT(void)
{
int cpu = get_cpu();
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/fixmap_32.h 2007-06-12 13:14:02.000000000 +0200
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/fixmap_32.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/fixmap_32.h 2007-06-12 13:14:02.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/fixmap_32.h 2009-06-09 15:35:38.000000000 +0200
@@ -55,7 +55,7 @@ enum fixed_addresses {
#ifdef CONFIG_X86_LOCAL_APIC
FIX_APIC_BASE, /* local (CPU) APIC) -- required for SMP or not */
@@ -11146,8 +11197,8 @@ Acked-by: jbeulich@novell.com
#define set_fixmap(idx, phys) \
__set_fixmap(idx, phys, PAGE_KERNEL)
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/hypercall_32.h 2008-11-25 12:22:34.000000000 +0100
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/hypercall_32.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/hypercall_32.h 2008-11-25 12:22:34.000000000 +0100
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/hypercall_32.h 2009-06-09 15:35:38.000000000 +0200
@@ -128,6 +128,23 @@
__res; \
})
@@ -11218,8 +11269,8 @@ Acked-by: jbeulich@novell.com
return _hypercall3(int, grant_table_op, cmd, uop, count);
}
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/hypercall_64.h 2008-11-25 12:22:34.000000000 +0100
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/hypercall_64.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/hypercall_64.h 2008-11-25 12:22:34.000000000 +0100
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/hypercall_64.h 2009-06-09 15:35:38.000000000 +0200
@@ -134,6 +134,23 @@
__res; \
})
@@ -11289,8 +11340,8 @@ Acked-by: jbeulich@novell.com
return _hypercall3(int, grant_table_op, cmd, uop, count);
}
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/hypervisor.h 2008-02-20 09:32:49.000000000 +0100
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/hypervisor.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/hypervisor.h 2008-02-20 09:32:49.000000000 +0100
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/hypervisor.h 2009-06-09 15:35:38.000000000 +0200
@@ -43,6 +43,7 @@
#include <xen/interface/physdev.h>
#include <xen/interface/sched.h>
@@ -11361,8 +11412,8 @@ Acked-by: jbeulich@novell.com
static inline int
HYPERVISOR_yield(
void)
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/pgtable-3level.h 2008-04-02 12:34:02.000000000 +0200
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/pgtable-3level.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/pgtable-3level.h 2008-04-02 12:34:02.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/pgtable-3level.h 2009-06-09 15:35:38.000000000 +0200
@@ -53,7 +53,6 @@ static inline int pte_exec_kernel(pte_t
* not possible, use pte_get_and_clear to obtain the old pte
* value and then use set_pte to update it. -ben
@@ -11419,8 +11470,8 @@ Acked-by: jbeulich@novell.com
static inline int pte_same(pte_t a, pte_t b)
{
return a.pte_low == b.pte_low && a.pte_high == b.pte_high;
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/pgtable_32.h 2009-03-18 10:39:32.000000000 +0100
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/pgtable_32.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/pgtable_32.h 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/pgtable_32.h 2009-06-09 15:35:38.000000000 +0200
@@ -260,31 +260,89 @@ static inline pte_t pte_mkhuge(pte_t pte
# include <asm/pgtable-2level.h>
#endif
@@ -11631,8 +11682,8 @@ Acked-by: jbeulich@novell.com
#include <asm-generic/pgtable.h>
#endif /* _I386_PGTABLE_H */
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/processor_32.h 2009-05-19 09:48:36.000000000 +0200
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/processor_32.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/processor_32.h 2009-06-09 15:32:17.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/processor_32.h 2009-06-09 15:35:38.000000000 +0200
@@ -146,6 +146,18 @@ static inline void detect_ht(struct cpui
#define X86_EFLAGS_VIP 0x00100000 /* Virtual Interrupt Pending */
#define X86_EFLAGS_ID 0x00200000 /* CPUID detection flag */
@@ -11744,8 +11795,8 @@ Acked-by: jbeulich@novell.com
/* from system description table in BIOS. Mostly for MCA use, but
others may find it useful. */
extern unsigned int machine_id;
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/smp_32.h 2007-06-12 13:14:02.000000000 +0200
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/smp_32.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/smp_32.h 2007-06-12 13:14:02.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/smp_32.h 2009-06-09 15:35:38.000000000 +0200
@@ -79,25 +79,36 @@ static inline int hard_smp_processor_id(
return GET_APIC_ID(*(unsigned long *)(APIC_BASE+APIC_ID));
}
@@ -11790,8 +11841,8 @@ Acked-by: jbeulich@novell.com
+#endif
+
#endif
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/system_32.h 2007-06-12 13:14:02.000000000 +0200
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/system_32.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/system_32.h 2007-06-12 13:14:02.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/system_32.h 2009-06-09 15:35:38.000000000 +0200
@@ -267,6 +267,9 @@ static inline unsigned long __xchg(unsig
#define cmpxchg(ptr,o,n)\
((__typeof__(*(ptr)))__cmpxchg((ptr),(unsigned long)(o),\
@@ -11842,8 +11893,8 @@ Acked-by: jbeulich@novell.com
#ifndef CONFIG_X86_CMPXCHG
/*
* Building a kernel capable running on 80386. It may be necessary to
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/tlbflush_32.h 2007-11-26 16:59:25.000000000 +0100
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/tlbflush_32.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/tlbflush_32.h 2007-11-26 16:59:25.000000000 +0100
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/tlbflush_32.h 2009-06-09 15:35:38.000000000 +0200
@@ -8,8 +8,6 @@
#define __flush_tlb_global() xen_tlb_flush()
#define __flush_tlb_all() xen_tlb_flush()
@@ -11853,8 +11904,8 @@ Acked-by: jbeulich@novell.com
#define cpu_has_invlpg (boot_cpu_data.x86 > 3)
#define __flush_tlb_single(addr) xen_invlpg(addr)
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/dma-mapping_64.h 2007-06-12 13:14:13.000000000 +0200
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/dma-mapping_64.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/dma-mapping_64.h 2007-06-12 13:14:13.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/dma-mapping_64.h 2009-06-09 15:35:38.000000000 +0200
@@ -55,13 +55,6 @@ extern dma_addr_t bad_dma_address;
extern struct dma_mapping_ops* dma_ops;
extern int iommu_merge;
@@ -11869,8 +11920,8 @@ Acked-by: jbeulich@novell.com
#if 0
static inline int dma_mapping_error(dma_addr_t dma_addr)
{
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/fixmap_64.h 2007-06-12 13:14:13.000000000 +0200
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/fixmap_64.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/fixmap_64.h 2007-06-12 13:14:13.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/fixmap_64.h 2009-06-09 15:35:38.000000000 +0200
@@ -41,7 +41,7 @@ enum fixed_addresses {
#ifdef CONFIG_X86_LOCAL_APIC
FIX_APIC_BASE, /* local (CPU) APIC) -- required for SMP or not */
@@ -11880,8 +11931,8 @@ Acked-by: jbeulich@novell.com
FIX_IO_APIC_BASE_0,
FIX_IO_APIC_BASE_END = FIX_IO_APIC_BASE_0 + MAX_IO_APICS-1,
#endif
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/pgtable_64.h 2009-05-19 09:48:36.000000000 +0200
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/pgtable_64.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/pgtable_64.h 2009-06-09 15:32:17.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/pgtable_64.h 2009-06-09 15:35:38.000000000 +0200
@@ -44,12 +44,9 @@ extern unsigned long __supported_pte_mas
#define swapper_pg_dir init_level4_pgt
@@ -12060,8 +12111,8 @@ Acked-by: jbeulich@novell.com
#define __HAVE_ARCH_PTEP_GET_AND_CLEAR
#define __HAVE_ARCH_PTEP_GET_AND_CLEAR_FULL
#define __HAVE_ARCH_PTEP_CLEAR_FLUSH
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/processor_64.h 2008-03-06 08:54:32.000000000 +0100
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/processor_64.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/processor_64.h 2008-03-06 08:54:32.000000000 +0100
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/processor_64.h 2009-06-09 15:35:38.000000000 +0200
@@ -484,6 +484,8 @@ static inline void __mwait(unsigned long
: :"a" (eax), "c" (ecx));
}
@@ -12071,8 +12122,8 @@ Acked-by: jbeulich@novell.com
#define stack_current() \
({ \
struct thread_info *ti; \
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/smp_64.h 2007-06-12 13:14:13.000000000 +0200
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/smp_64.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/smp_64.h 2007-06-12 13:14:13.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/smp_64.h 2009-06-09 15:35:38.000000000 +0200
@@ -4,15 +4,12 @@
/*
* We need the APIC definitions automatically as part of 'smp.h'
@@ -12178,8 +12229,8 @@ Acked-by: jbeulich@novell.com
+#endif /* !CONFIG_SMP */
#endif
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/system_64.h 2007-11-26 16:59:25.000000000 +0100
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/system_64.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/system_64.h 2007-11-26 16:59:25.000000000 +0100
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/system_64.h 2009-06-09 15:35:38.000000000 +0200
@@ -24,6 +24,7 @@
#define __EXTRA_CLOBBER \
,"rcx","rbx","rdx","r8","r9","r10","r11","r12","r13","r14","r15"
@@ -12188,8 +12239,8 @@ Acked-by: jbeulich@novell.com
#define switch_to(prev,next,last) \
asm volatile(SAVE_CONTEXT \
"movq %%rsp,%P[threadrsp](%[prev])\n\t" /* save RSP */ \
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/tlbflush_64.h 2007-11-26 16:59:25.000000000 +0100
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/tlbflush_64.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/tlbflush_64.h 2007-11-26 16:59:25.000000000 +0100
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/tlbflush_64.h 2009-06-09 15:35:38.000000000 +0200
@@ -12,9 +12,6 @@
*/
#define __flush_tlb_global() xen_tlb_flush()
@@ -12200,8 +12251,8 @@ Acked-by: jbeulich@novell.com
#define __flush_tlb_all() __flush_tlb_global()
#define __flush_tlb_one(addr) xen_invlpg((unsigned long)addr)
---- head-2009-05-19.orig/include/linux/skbuff.h 2009-05-19 09:44:03.000000000 +0200
-+++ head-2009-05-19/include/linux/skbuff.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/include/linux/skbuff.h 2009-06-09 15:22:27.000000000 +0200
++++ head-2009-06-09/include/linux/skbuff.h 2009-06-09 15:35:38.000000000 +0200
@@ -2050,5 +2050,12 @@ static inline void skb_forward_csum(stru
}
@@ -12215,8 +12266,8 @@ Acked-by: jbeulich@novell.com
+
#endif /* __KERNEL__ */
#endif /* _LINUX_SKBUFF_H */
---- head-2009-05-19.orig/include/xen/evtchn.h 2009-04-07 13:58:49.000000000 +0200
-+++ head-2009-05-19/include/xen/evtchn.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/include/xen/evtchn.h 2009-04-07 13:58:49.000000000 +0200
++++ head-2009-06-09/include/xen/evtchn.h 2009-06-09 15:35:38.000000000 +0200
@@ -54,34 +54,34 @@
*/
int bind_caller_port_to_irqhandler(
@@ -12257,8 +12308,8 @@ Acked-by: jbeulich@novell.com
unsigned long irqflags,
const char *devname,
void *dev_id);
---- head-2009-05-19.orig/include/xen/xencons.h 2007-10-15 09:39:38.000000000 +0200
-+++ head-2009-05-19/include/xen/xencons.h 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/include/xen/xencons.h 2007-10-15 09:39:38.000000000 +0200
++++ head-2009-06-09/include/xen/xencons.h 2009-06-09 15:35:38.000000000 +0200
@@ -8,7 +8,7 @@ void xencons_force_flush(void);
void xencons_resume(void);
@@ -12268,8 +12319,8 @@ Acked-by: jbeulich@novell.com
void xencons_tx(void);
int xencons_ring_init(void);
---- head-2009-05-19.orig/mm/mprotect.c 2009-05-19 09:44:03.000000000 +0200
-+++ head-2009-05-19/mm/mprotect.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/mm/mprotect.c 2009-06-09 15:22:27.000000000 +0200
++++ head-2009-06-09/mm/mprotect.c 2009-06-09 15:35:38.000000000 +0200
@@ -90,7 +90,7 @@ static inline void change_pmd_range(stru
next = pmd_addr_end(addr, end);
if (pmd_none_or_clear_bad(pmd))
@@ -12279,8 +12330,8 @@ Acked-by: jbeulich@novell.com
continue;
change_pte_range(mm, pmd, addr, next, newprot, dirty_accountable);
} while (pmd++, addr = next, addr != end);
---- head-2009-05-19.orig/net/core/dev.c 2009-05-19 09:44:03.000000000 +0200
-+++ head-2009-05-19/net/core/dev.c 2009-05-19 09:48:43.000000000 +0200
+--- head-2009-06-09.orig/net/core/dev.c 2009-06-09 15:22:27.000000000 +0200
++++ head-2009-06-09/net/core/dev.c 2009-06-09 15:35:38.000000000 +0200
@@ -1800,15 +1800,14 @@ inline int skb_checksum_setup(struct sk_
}
if ((skb->h.raw + skb->csum + 2) > skb->tail)
diff --git a/patches.xen/xen3-patch-2.6.20 b/patches.xen/xen3-patch-2.6.20
index a3a26ffc55..9f45301ddd 100644
--- a/patches.xen/xen3-patch-2.6.20
+++ b/patches.xen/xen3-patch-2.6.20
@@ -6,9 +6,9 @@ Automatically created from "patches.kernel.org/patch-2.6.20" by xen-port-patches
Acked-by: jbeulich@novell.com
---- head-2009-05-19.orig/arch/x86/Kconfig 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/Kconfig 2009-05-19 09:49:01.000000000 +0200
-@@ -1555,7 +1555,7 @@ config PHYSICAL_START
+--- head-2009-06-09.orig/arch/x86/Kconfig 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/Kconfig 2009-06-09 15:36:07.000000000 +0200
+@@ -1568,7 +1568,7 @@ config PHYSICAL_START
config RELOCATABLE
bool "Build a relocatable kernel (EXPERIMENTAL)"
@@ -17,8 +17,8 @@ Acked-by: jbeulich@novell.com
---help---
This builds a kernel image that retains relocation information
so it can be loaded someplace besides the default 1MB.
---- head-2009-05-19.orig/arch/x86/kernel/asm-offsets_32.c 2009-05-19 09:44:28.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/asm-offsets_32.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/asm-offsets_32.c 2009-06-09 15:26:38.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/asm-offsets_32.c 2009-06-09 15:36:07.000000000 +0200
@@ -55,6 +55,7 @@ void foo(void)
OFFSET(TI_exec_domain, thread_info, exec_domain);
OFFSET(TI_flags, thread_info, flags);
@@ -39,8 +39,8 @@ Acked-by: jbeulich@novell.com
#ifdef CONFIG_PARAVIRT
BLANK();
OFFSET(PARAVIRT_enabled, pv_info, paravirt_enabled);
---- head-2009-05-19.orig/arch/x86/kernel/cpu/common-xen.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/cpu/common-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/cpu/common-xen.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/cpu/common-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -22,6 +22,7 @@
#define phys_pkg_id(a,b) a
#endif
@@ -438,8 +438,8 @@ Acked-by: jbeulich@novell.com
#ifdef CONFIG_HOTPLUG_CPU
void __cpuinit cpu_uninit(void)
{
---- head-2009-05-19.orig/arch/x86/kernel/cpu/mtrr/main-xen.c 2008-01-28 12:24:18.000000000 +0100
-+++ head-2009-05-19/arch/x86/kernel/cpu/mtrr/main-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/cpu/mtrr/main-xen.c 2008-01-28 12:24:18.000000000 +0100
++++ head-2009-06-09/arch/x86/kernel/cpu/mtrr/main-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -12,7 +12,7 @@
static DEFINE_MUTEX(mtrr_mutex);
@@ -460,7 +460,7 @@ Acked-by: jbeulich@novell.com
struct xen_platform_op op;
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ head-2009-05-19/arch/x86/kernel/e820_32-xen.c 2009-05-19 09:49:01.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/e820_32-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -0,0 +1,1015 @@
+#include <linux/kernel.h>
+#include <linux/types.h>
@@ -1477,8 +1477,8 @@ Acked-by: jbeulich@novell.com
+ return 0;
+}
+early_param("memmap", parse_memmap);
---- head-2009-05-19.orig/arch/x86/kernel/entry_32-xen.S 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/entry_32-xen.S 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/entry_32-xen.S 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/entry_32-xen.S 2009-06-09 15:36:07.000000000 +0200
@@ -30,12 +30,13 @@
* 18(%esp) - %eax
* 1C(%esp) - %ds
@@ -2249,8 +2249,8 @@ Acked-by: jbeulich@novell.com
ENTRY(fixup_4gb_segment)
RING0_EC_FRAME
pushl $do_fixup_4gb_segment
---- head-2009-05-19.orig/arch/x86/kernel/head_32-xen.S 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/head_32-xen.S 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/head_32-xen.S 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/head_32-xen.S 2009-06-09 15:36:07.000000000 +0200
@@ -9,6 +9,7 @@
#include <asm/cache.h>
#include <asm/thread_info.h>
@@ -2367,8 +2367,8 @@ Acked-by: jbeulich@novell.com
.ascii ",FEATURES=writable_page_tables"
.ascii "|writable_descriptor_tables"
.ascii "|auto_translated_physmap"
---- head-2009-05-19.orig/arch/x86/kernel/io_apic_32-xen.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/io_apic_32-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/io_apic_32-xen.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/io_apic_32-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -34,6 +34,7 @@
#include <linux/pci.h>
#include <linux/msi.h>
@@ -2561,8 +2561,8 @@ Acked-by: jbeulich@novell.com
set_native_irq_info(irq, TARGET_CPUS);
spin_unlock_irqrestore(&ioapic_lock, flags);
---- head-2009-05-19.orig/arch/x86/kernel/ldt_32-xen.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/ldt_32-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/ldt_32-xen.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/ldt_32-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -177,16 +177,14 @@ static int read_default_ldt(void __user
{
int err;
@@ -2581,8 +2581,8 @@ Acked-by: jbeulich@novell.com
err = -EFAULT;
return err;
---- head-2009-05-19.orig/arch/x86/kernel/microcode-xen.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/microcode-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/microcode-xen.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/microcode-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -1,7 +1,7 @@
/*
* Intel CPU Microcode Update Driver for Linux
@@ -2610,8 +2610,8 @@ Acked-by: jbeulich@novell.com
return 0;
}
---- head-2009-05-19.orig/arch/x86/kernel/mpparse_32-xen.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/mpparse_32-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/mpparse_32-xen.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/mpparse_32-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -36,7 +36,7 @@
/* Have we found an MP table */
@@ -2661,8 +2661,8 @@ Acked-by: jbeulich@novell.com
{
struct mpc_config_processor processor;
int boot_cpu = 0;
---- head-2009-05-19.orig/arch/x86/kernel/pci-dma-xen.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/pci-dma-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/pci-dma-xen.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/pci-dma-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -276,7 +276,7 @@ EXPORT_SYMBOL(dma_free_coherent);
int dma_declare_coherent_memory(struct device *dev, dma_addr_t bus_addr,
dma_addr_t device_addr, size_t size, int flags)
@@ -2698,8 +2698,8 @@ Acked-by: jbeulich@novell.com
return 0;
}
EXPORT_SYMBOL(dma_declare_coherent_memory);
---- head-2009-05-19.orig/arch/x86/kernel/process_32-xen.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/process_32-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/process_32-xen.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/process_32-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -60,6 +60,7 @@
#include <asm/tlbflush.h>
@@ -2824,8 +2824,8 @@ Acked-by: jbeulich@novell.com
return prev_p;
}
---- head-2009-05-19.orig/arch/x86/kernel/quirks-xen.c 2008-01-28 12:24:19.000000000 +0100
-+++ head-2009-05-19/arch/x86/kernel/quirks-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/quirks-xen.c 2008-01-28 12:24:19.000000000 +0100
++++ head-2009-06-09/arch/x86/kernel/quirks-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -3,10 +3,12 @@
*/
#include <linux/pci.h>
@@ -2922,8 +2922,8 @@ Acked-by: jbeulich@novell.com
+DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_E7520_MCH, verify_quirk_intel_irqbalance);
+
#endif
---- head-2009-05-19.orig/arch/x86/kernel/setup_32-xen.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/setup_32-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/setup_32-xen.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/setup_32-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -76,9 +76,6 @@
#include <xen/interface/kexec.h>
#endif
@@ -4010,8 +4010,8 @@ Acked-by: jbeulich@novell.com
if (is_initial_xendomain()) {
#ifdef CONFIG_VT
---- head-2009-05-19.orig/arch/x86/kernel/smp_32-xen.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/smp_32-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/smp_32-xen.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/smp_32-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -659,6 +659,10 @@ int smp_call_function_single(int cpu, vo
put_cpu();
return -EBUSY;
@@ -4023,8 +4023,8 @@ Acked-by: jbeulich@novell.com
spin_lock_bh(&call_lock);
__smp_call_function_single(cpu, func, info, nonatomic, wait);
spin_unlock_bh(&call_lock);
---- head-2009-05-19.orig/arch/x86/kernel/time_32-xen.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/time_32-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/time_32-xen.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/time_32-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -61,6 +61,7 @@
#include <asm/uaccess.h>
#include <asm/processor.h>
@@ -4080,8 +4080,8 @@ Acked-by: jbeulich@novell.com
}
#endif
---- head-2009-05-19.orig/arch/x86/kernel/traps_32-xen.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/traps_32-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/traps_32-xen.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/traps_32-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -29,6 +29,8 @@
#include <linux/kexec.h>
#include <linux/unwind.h>
@@ -4418,8 +4418,8 @@ Acked-by: jbeulich@novell.com
-}
-__setup("call_trace=", call_trace_setup);
-#endif
---- head-2009-05-19.orig/arch/x86/kernel/vmlinux_32.lds.S 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/vmlinux_32.lds.S 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/vmlinux_32.lds.S 2009-06-09 15:21:05.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/vmlinux_32.lds.S 2009-06-09 15:36:07.000000000 +0200
@@ -29,6 +29,12 @@ PHDRS {
SECTIONS
{
@@ -4433,8 +4433,8 @@ Acked-by: jbeulich@novell.com
phys_startup_32 = startup_32 - LOAD_OFFSET;
.text.head : AT(ADDR(.text.head) - LOAD_OFFSET) {
---- head-2009-05-19.orig/arch/x86/kvm/Kconfig 2009-05-19 09:37:30.000000000 +0200
-+++ head-2009-05-19/arch/x86/kvm/Kconfig 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kvm/Kconfig 2009-06-09 15:21:05.000000000 +0200
++++ head-2009-06-09/arch/x86/kvm/Kconfig 2009-06-09 15:36:07.000000000 +0200
@@ -11,6 +11,7 @@ config HAVE_KVM_IRQCHIP
menuconfig VIRTUALIZATION
bool "Virtualization"
@@ -4443,8 +4443,8 @@ Acked-by: jbeulich@novell.com
default y
---help---
Say Y here to get to see options for using your Linux host to run other
---- head-2009-05-19.orig/arch/x86/mm/fault_32-xen.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/mm/fault_32-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/mm/fault_32-xen.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/mm/fault_32-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -22,9 +22,9 @@
#include <linux/highmem.h>
#include <linux/module.h>
@@ -4489,8 +4489,8 @@ Acked-by: jbeulich@novell.com
break;
prefetch = (instr_lo == 0xF) &&
(opcode == 0x0D || opcode == 0x18);
---- head-2009-05-19.orig/arch/x86/mm/highmem_32-xen.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/mm/highmem_32-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/mm/highmem_32-xen.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/mm/highmem_32-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -32,7 +32,7 @@ static void *__kmap_atomic(struct page *
unsigned long vaddr;
@@ -4545,8 +4545,8 @@ Acked-by: jbeulich@novell.com
idx = type + KM_TYPE_NR*smp_processor_id();
vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx);
---- head-2009-05-19.orig/arch/x86/mm/init_32-xen.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/mm/init_32-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/mm/init_32-xen.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/mm/init_32-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -233,8 +233,6 @@ static inline int page_kills_ppro(unsign
#endif
@@ -4607,8 +4607,8 @@ Acked-by: jbeulich@novell.com
void __init pgtable_cache_init(void)
{
---- head-2009-05-19.orig/arch/x86/mm/pgtable_32-xen.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/mm/pgtable_32-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/mm/pgtable_32-xen.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/mm/pgtable_32-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -203,7 +203,7 @@ void pte_free(struct page *pte)
__free_page(pte);
}
@@ -4636,8 +4636,8 @@ Acked-by: jbeulich@novell.com
{
unsigned long flags; /* can be called from interrupt context */
---- head-2009-05-19.orig/arch/x86/pci/irq-xen.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/pci/irq-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/pci/irq-xen.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/pci/irq-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -768,7 +768,7 @@ static void __init pirq_find_router(stru
DBG(KERN_DEBUG "PCI: Attempting to find IRQ router for %04x:%04x\n",
rt->rtr_vendor, rt->rtr_device);
@@ -4656,8 +4656,8 @@ Acked-by: jbeulich@novell.com
}
static struct irq_info *pirq_get_info(struct pci_dev *dev)
---- head-2009-05-19.orig/arch/x86/kernel/entry_64-xen.S 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/entry_64-xen.S 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/entry_64-xen.S 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/entry_64-xen.S 2009-06-09 15:36:07.000000000 +0200
@@ -261,7 +261,6 @@ ENTRY(system_call)
movq %rax,ORIG_RAX-ARGOFFSET(%rsp)
GET_THREAD_INFO(%rcx)
@@ -4795,8 +4795,8 @@ Acked-by: jbeulich@novell.com
- CFI_ENDPROC
-ENDPROC(arch_unwind_init_running)
-#endif
---- head-2009-05-19.orig/arch/x86/kernel/head64-xen.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/head64-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/head64-xen.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/head64-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -104,7 +104,10 @@ void __init x86_64_start_kernel(char * r
machine_to_phys_order++;
@@ -4809,8 +4809,8 @@ Acked-by: jbeulich@novell.com
set_intr_gate(i, early_idt_handler);
asm volatile("lidt %0" :: "m" (idt_descr));
#endif
---- head-2009-05-19.orig/arch/x86/kernel/io_apic_64-xen.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/io_apic_64-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/io_apic_64-xen.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/io_apic_64-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -202,14 +202,20 @@ static struct IO_APIC_route_entry ioapic
* the interrupt, and we need to make sure the entry is fully populated
* before that happens.
@@ -5003,8 +5003,8 @@ Acked-by: jbeulich@novell.com
}
}
---- head-2009-05-19.orig/arch/x86/kernel/irq_64-xen.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/irq_64-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/irq_64-xen.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/irq_64-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -120,7 +120,7 @@ asmlinkage unsigned int do_IRQ(struct pt
if (likely(irq < NR_IRQS))
@@ -5014,8 +5014,8 @@ Acked-by: jbeulich@novell.com
printk(KERN_EMERG "%s: %d.%d No irq handler for irq\n",
__func__, smp_processor_id(), irq);
---- head-2009-05-19.orig/arch/x86/kernel/mpparse_64-xen.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/mpparse_64-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/mpparse_64-xen.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/mpparse_64-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -35,8 +35,6 @@
int smp_found_config;
unsigned int __initdata maxcpus = NR_CPUS;
@@ -5025,8 +5025,8 @@ Acked-by: jbeulich@novell.com
/*
* Various Linux-internal data structures created from the
* MP-table.
---- head-2009-05-19.orig/arch/x86/kernel/process_64-xen.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/process_64-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/process_64-xen.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/process_64-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -119,29 +119,23 @@ void exit_idle(void)
static void poll_idle (void)
{
@@ -5081,8 +5081,8 @@ Acked-by: jbeulich@novell.com
enter_idle();
idle();
/* In many cases the interrupt that ended idle
---- head-2009-05-19.orig/arch/x86/kernel/setup_64-xen.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/setup_64-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/setup_64-xen.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/setup_64-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -573,8 +573,7 @@ void __init setup_arch(char **cmdline_p)
if (LOADER_TYPE && INITRD_START) {
if (INITRD_START + INITRD_SIZE <= (end_pfn << PAGE_SHIFT)) {
@@ -5135,8 +5135,8 @@ Acked-by: jbeulich@novell.com
c->x86_max_cores = intel_num_cpu_cores(c);
srat_detect_node();
---- head-2009-05-19.orig/arch/x86/kernel/smp_64-xen.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/smp_64-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/smp_64-xen.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/smp_64-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -384,12 +384,17 @@ int smp_call_function_single (int cpu, v
put_cpu();
return 0;
@@ -5155,8 +5155,8 @@ Acked-by: jbeulich@novell.com
/*
* this function sends a 'generic call function' IPI to all other CPUs
---- head-2009-05-19.orig/arch/x86/kernel/traps_64-xen.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/traps_64-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/traps_64-xen.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/traps_64-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -30,9 +30,10 @@
#include <linux/kprobes.h>
#include <linux/kexec.h>
@@ -5382,8 +5382,8 @@ Acked-by: jbeulich@novell.com
-}
-early_param("call_trace", call_trace_setup);
-#endif
---- head-2009-05-19.orig/arch/x86/kernel/vsyscall_64-xen.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/kernel/vsyscall_64-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/kernel/vsyscall_64-xen.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/kernel/vsyscall_64-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -42,6 +42,7 @@
#include <asm/topology.h>
@@ -5425,8 +5425,8 @@ Acked-by: jbeulich@novell.com
__set_fixmap(VSYSCALL_FIRST_PAGE, physaddr_page0, PAGE_KERNEL_VSYSCALL);
}
---- head-2009-05-19.orig/arch/x86/mm/fault_64-xen.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/mm/fault_64-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/mm/fault_64-xen.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/mm/fault_64-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -23,9 +23,9 @@
#include <linux/compiler.h>
#include <linux/module.h>
@@ -5474,8 +5474,8 @@ Acked-by: jbeulich@novell.com
}
void dump_pagetable(unsigned long address)
---- head-2009-05-19.orig/arch/x86/mm/init_64-xen.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/mm/init_64-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/mm/init_64-xen.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/mm/init_64-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -1127,14 +1127,15 @@ static __init int x8664_sysctl_init(void
__initcall(x8664_sysctl_init);
#endif
@@ -5495,8 +5495,8 @@ Acked-by: jbeulich@novell.com
};
struct vm_area_struct *get_gate_vma(struct task_struct *tsk)
---- head-2009-05-19.orig/arch/x86/mm/pageattr_64-xen.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/mm/pageattr_64-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/mm/pageattr_64-xen.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/mm/pageattr_64-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -330,34 +330,40 @@ static struct page *split_large_page(uns
return base;
}
@@ -5583,8 +5583,8 @@ Acked-by: jbeulich@novell.com
}
}
---- head-2009-05-19.orig/drivers/pci/msi-xen.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/drivers/pci/msi-xen.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/drivers/pci/msi-xen.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/drivers/pci/msi-xen.c 2009-06-09 15:36:07.000000000 +0200
@@ -273,10 +273,8 @@ void disable_msi_mode(struct pci_dev *de
pci_write_config_word(dev, msi_control_reg(pos), control);
dev->msix_enabled = 0;
@@ -5611,8 +5611,8 @@ Acked-by: jbeulich@novell.com
}
#ifdef CONFIG_PM
---- head-2009-05-19.orig/drivers/xen/balloon/balloon.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/drivers/xen/balloon/balloon.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/balloon/balloon.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/drivers/xen/balloon/balloon.c 2009-06-09 15:36:07.000000000 +0200
@@ -97,8 +97,8 @@ extern unsigned long totalhigh_pages;
static LIST_HEAD(ballooned_pages);
@@ -5624,7 +5624,7 @@ Acked-by: jbeulich@novell.com
static struct timer_list balloon_timer;
/* When ballooning out (allocating memory to return to Xen) we don't really
-@@ -389,7 +389,7 @@ static int decrease_reservation(unsigned
+@@ -375,7 +375,7 @@ static int decrease_reservation(unsigned
* by the balloon lock), or with changes to the Xen hard limit, but we will
* recover from these in time.
*/
@@ -5633,8 +5633,8 @@ Acked-by: jbeulich@novell.com
{
int need_sleep = 0;
long credit;
---- head-2009-05-19.orig/drivers/xen/blkback/blkback.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/drivers/xen/blkback/blkback.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/blkback/blkback.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/drivers/xen/blkback/blkback.c 2009-06-09 15:36:07.000000000 +0200
@@ -37,6 +37,7 @@
#include <linux/spinlock.h>
@@ -5643,8 +5643,8 @@ Acked-by: jbeulich@novell.com
#include <linux/list.h>
#include <linux/delay.h>
#include <xen/balloon.h>
---- head-2009-05-19.orig/drivers/xen/blkback/interface.c 2007-06-12 13:13:44.000000000 +0200
-+++ head-2009-05-19/drivers/xen/blkback/interface.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/blkback/interface.c 2007-06-12 13:13:44.000000000 +0200
++++ head-2009-06-09/drivers/xen/blkback/interface.c 2009-06-09 15:36:07.000000000 +0200
@@ -34,7 +34,7 @@
#include <xen/evtchn.h>
#include <linux/kthread.h>
@@ -5654,8 +5654,8 @@ Acked-by: jbeulich@novell.com
blkif_t *blkif_alloc(domid_t domid)
{
---- head-2009-05-19.orig/drivers/xen/blkfront/blkfront.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/drivers/xen/blkfront/blkfront.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/blkfront/blkfront.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/drivers/xen/blkfront/blkfront.c 2009-06-09 15:36:07.000000000 +0200
@@ -71,7 +71,7 @@ static int setup_blkring(struct xenbus_d
static void kick_pending_request_queues(struct blkfront_info *);
@@ -5686,8 +5686,8 @@ Acked-by: jbeulich@novell.com
spin_lock_irq(&blkif_io_lock);
if (info->connected == BLKIF_STATE_CONNECTED)
kick_pending_request_queues(info);
---- head-2009-05-19.orig/drivers/xen/blktap/blktap.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/drivers/xen/blktap/blktap.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/blktap/blktap.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/drivers/xen/blktap/blktap.c 2009-06-09 15:36:07.000000000 +0200
@@ -40,6 +40,7 @@
#include <linux/spinlock.h>
@@ -5696,8 +5696,8 @@ Acked-by: jbeulich@novell.com
#include <linux/list.h>
#include <asm/hypervisor.h>
#include "common.h"
---- head-2009-05-19.orig/drivers/xen/blktap/interface.c 2008-09-15 13:40:15.000000000 +0200
-+++ head-2009-05-19/drivers/xen/blktap/interface.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/blktap/interface.c 2008-09-15 13:40:15.000000000 +0200
++++ head-2009-06-09/drivers/xen/blktap/interface.c 2009-06-09 15:36:07.000000000 +0200
@@ -34,7 +34,7 @@
#include "common.h"
#include <xen/evtchn.h>
@@ -5707,8 +5707,8 @@ Acked-by: jbeulich@novell.com
blkif_t *tap_alloc_blkif(domid_t domid)
{
---- head-2009-05-19.orig/drivers/xen/char/mem.c 2007-08-06 15:10:49.000000000 +0200
-+++ head-2009-05-19/drivers/xen/char/mem.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/char/mem.c 2007-08-06 15:10:49.000000000 +0200
++++ head-2009-06-09/drivers/xen/char/mem.c 2009-06-09 15:36:07.000000000 +0200
@@ -157,7 +157,7 @@ static loff_t memory_lseek(struct file *
{
loff_t ret;
@@ -5727,8 +5727,8 @@ Acked-by: jbeulich@novell.com
return ret;
}
---- head-2009-05-19.orig/drivers/xen/console/console.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/drivers/xen/console/console.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/console/console.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/drivers/xen/console/console.c 2009-06-09 15:36:07.000000000 +0200
@@ -85,11 +85,6 @@ static int xc_num = -1;
#define XEN_HVC_MAJOR 229
#define XEN_HVC_MINOR 0
@@ -5763,8 +5763,8 @@ Acked-by: jbeulich@novell.com
if (buf[i] == '\x0f') { /* ^O */
if (!sysrq_requested) {
sysrq_requested = jiffies;
---- head-2009-05-19.orig/drivers/xen/core/reboot.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/drivers/xen/core/reboot.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/core/reboot.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/drivers/xen/core/reboot.c 2009-06-09 15:36:07.000000000 +0200
@@ -34,8 +34,8 @@ static int suspend_cancelled;
/* Can we leave APs online when we suspend? */
static int fast_suspend;
@@ -5800,8 +5800,8 @@ Acked-by: jbeulich@novell.com
{
int err;
---- head-2009-05-19.orig/drivers/xen/core/smpboot.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/drivers/xen/core/smpboot.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/core/smpboot.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/drivers/xen/core/smpboot.c 2009-06-09 15:36:07.000000000 +0200
@@ -161,7 +161,12 @@ static void xen_smp_intr_exit(unsigned i
void __cpuinit cpu_bringup(void)
@@ -5854,8 +5854,8 @@ Acked-by: jbeulich@novell.com
#ifdef __x86_64__
cpu_pda(cpu)->pcurrent = idle;
cpu_pda(cpu)->cpunumber = cpu;
---- head-2009-05-19.orig/drivers/xen/fbfront/xenfb.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/drivers/xen/fbfront/xenfb.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/fbfront/xenfb.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/drivers/xen/fbfront/xenfb.c 2009-06-09 15:36:07.000000000 +0200
@@ -25,6 +25,7 @@
#include <linux/vmalloc.h>
#include <linux/mm.h>
@@ -5864,8 +5864,8 @@ Acked-by: jbeulich@novell.com
#include <asm/hypervisor.h>
#include <xen/evtchn.h>
#include <xen/interface/io/fbif.h>
---- head-2009-05-19.orig/drivers/xen/netback/loopback.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/drivers/xen/netback/loopback.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/netback/loopback.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/drivers/xen/netback/loopback.c 2009-06-09 15:36:07.000000000 +0200
@@ -54,6 +54,7 @@
#include <net/dst.h>
#include <net/xfrm.h> /* secpath_reset() */
@@ -5874,8 +5874,8 @@ Acked-by: jbeulich@novell.com
static int nloopbacks = -1;
module_param(nloopbacks, int, 0);
---- head-2009-05-19.orig/drivers/xen/pciback/conf_space_header.c 2008-10-29 09:55:56.000000000 +0100
-+++ head-2009-05-19/drivers/xen/pciback/conf_space_header.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/pciback/conf_space_header.c 2008-10-29 09:55:56.000000000 +0100
++++ head-2009-06-09/drivers/xen/pciback/conf_space_header.c 2009-06-09 15:36:07.000000000 +0200
@@ -22,14 +22,14 @@ static int command_write(struct pci_dev
{
int err;
@@ -5893,8 +5893,8 @@ Acked-by: jbeulich@novell.com
if (unlikely(verbose_request))
printk(KERN_DEBUG "pciback: %s: disable\n",
pci_name(dev));
---- head-2009-05-19.orig/drivers/xen/pciback/pciback.h 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/drivers/xen/pciback/pciback.h 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/pciback/pciback.h 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/drivers/xen/pciback/pciback.h 2009-06-09 15:36:07.000000000 +0200
@@ -100,7 +100,7 @@ void pciback_release_devices(struct pcib
/* Handles events from front-end */
@@ -5904,8 +5904,8 @@ Acked-by: jbeulich@novell.com
int pciback_xenbus_register(void);
void pciback_xenbus_unregister(void);
---- head-2009-05-19.orig/drivers/xen/pciback/pciback_ops.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/drivers/xen/pciback/pciback_ops.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/pciback/pciback_ops.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/drivers/xen/pciback/pciback_ops.c 2009-06-09 15:36:07.000000000 +0200
@@ -26,7 +26,7 @@ void pciback_reset_device(struct pci_dev
pci_write_config_word(dev, PCI_COMMAND, 0);
@@ -5927,8 +5927,8 @@ Acked-by: jbeulich@novell.com
struct pci_dev *dev;
struct xen_pci_op *op = &pdev->sh_info->op;
---- head-2009-05-19.orig/drivers/xen/pciback/xenbus.c 2009-04-07 13:58:48.000000000 +0200
-+++ head-2009-05-19/drivers/xen/pciback/xenbus.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/pciback/xenbus.c 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/pciback/xenbus.c 2009-06-09 15:36:07.000000000 +0200
@@ -33,7 +33,7 @@ static struct pciback_device *alloc_pdev
pdev->evtchn_irq = INVALID_EVTCHN_IRQ;
pdev->be_watching = 0;
@@ -5938,8 +5938,8 @@ Acked-by: jbeulich@novell.com
if (pciback_init_devices(pdev)) {
kfree(pdev);
---- head-2009-05-19.orig/drivers/xen/pcifront/pci_op.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/drivers/xen/pcifront/pci_op.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/pcifront/pci_op.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/drivers/xen/pcifront/pci_op.c 2009-06-09 15:36:07.000000000 +0200
@@ -636,9 +636,9 @@ static pci_ers_result_t pcifront_common_
}
@@ -5952,8 +5952,8 @@ Acked-by: jbeulich@novell.com
int cmd = pdev->sh_info->aer_op.cmd;
pci_channel_state_t state =
(pci_channel_state_t)pdev->sh_info->aer_op.err;
---- head-2009-05-19.orig/drivers/xen/pcifront/pcifront.h 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/drivers/xen/pcifront/pcifront.h 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/pcifront/pcifront.h 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/drivers/xen/pcifront/pcifront.h 2009-06-09 15:36:07.000000000 +0200
@@ -48,7 +48,7 @@ int pcifront_rescan_root(struct pcifront
unsigned int domain, unsigned int bus);
void pcifront_free_roots(struct pcifront_device *pdev);
@@ -5963,8 +5963,8 @@ Acked-by: jbeulich@novell.com
irqreturn_t pcifront_handler_aer(int irq, void *dev);
---- head-2009-05-19.orig/drivers/xen/pcifront/xenbus.c 2009-04-07 13:58:48.000000000 +0200
-+++ head-2009-05-19/drivers/xen/pcifront/xenbus.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/pcifront/xenbus.c 2009-04-07 13:58:48.000000000 +0200
++++ head-2009-06-09/drivers/xen/pcifront/xenbus.c 2009-06-09 15:36:07.000000000 +0200
@@ -49,7 +49,7 @@ static struct pcifront_device *alloc_pde
pdev->evtchn = INVALID_EVTCHN;
pdev->gnt_ref = INVALID_GRANT_REF;
@@ -5974,8 +5974,8 @@ Acked-by: jbeulich@novell.com
dev_dbg(&xdev->dev, "Allocated pdev @ 0x%p pdev->sh_info @ 0x%p\n",
pdev, pdev->sh_info);
---- head-2009-05-19.orig/drivers/xen/scsiback/interface.c 2008-07-21 11:00:33.000000000 +0200
-+++ head-2009-05-19/drivers/xen/scsiback/interface.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/scsiback/interface.c 2008-07-21 11:00:33.000000000 +0200
++++ head-2009-06-09/drivers/xen/scsiback/interface.c 2009-06-09 15:36:07.000000000 +0200
@@ -39,7 +39,7 @@
#include <linux/kthread.h>
@@ -5985,8 +5985,8 @@ Acked-by: jbeulich@novell.com
struct vscsibk_info *vscsibk_info_alloc(domid_t domid)
{
---- head-2009-05-19.orig/drivers/xen/scsiback/scsiback.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/drivers/xen/scsiback/scsiback.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/scsiback/scsiback.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/drivers/xen/scsiback/scsiback.c 2009-06-09 15:36:07.000000000 +0200
@@ -335,13 +335,11 @@ static int scsiback_merge_bio(struct req
if (!rq->bio)
@@ -6002,8 +6002,8 @@ Acked-by: jbeulich@novell.com
}
return 0;
---- head-2009-05-19.orig/drivers/xen/sfc_netfront/accel_vi.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/drivers/xen/sfc_netfront/accel_vi.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/sfc_netfront/accel_vi.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/drivers/xen/sfc_netfront/accel_vi.c 2009-06-09 15:36:07.000000000 +0200
@@ -463,7 +463,7 @@ netfront_accel_enqueue_skb_multi(netfron
if (skb->ip_summed == CHECKSUM_PARTIAL) {
@@ -6022,8 +6022,8 @@ Acked-by: jbeulich@novell.com
}
NETFRONT_ACCEL_PKTBUFF_FOR_EACH_FRAGMENT
(skb, idx, frag_data, frag_len, {
---- head-2009-05-19.orig/drivers/xen/tpmback/interface.c 2008-01-21 11:15:26.000000000 +0100
-+++ head-2009-05-19/drivers/xen/tpmback/interface.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/tpmback/interface.c 2008-01-21 11:15:26.000000000 +0100
++++ head-2009-06-09/drivers/xen/tpmback/interface.c 2009-06-09 15:36:07.000000000 +0200
@@ -15,7 +15,7 @@
#include <xen/balloon.h>
#include <xen/gnttab.h>
@@ -6033,8 +6033,8 @@ Acked-by: jbeulich@novell.com
int num_frontends = 0;
LIST_HEAD(tpmif_list);
---- head-2009-05-19.orig/drivers/xen/usbback/usbback.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/drivers/xen/usbback/usbback.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/drivers/xen/usbback/usbback.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/drivers/xen/usbback/usbback.c 2009-06-09 15:36:07.000000000 +0200
@@ -530,9 +530,10 @@ struct set_interface_request {
struct work_struct work;
};
@@ -6101,33 +6101,32 @@ Acked-by: jbeulich@novell.com
usb_get_dev(udev);
schedule_work(&req->work);
---- head-2009-05-19.orig/drivers/xen/xenbus/xenbus_comms.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/drivers/xen/xenbus/xenbus_comms.c 2009-05-19 09:49:01.000000000 +0200
-@@ -49,9 +49,9 @@
+--- head-2009-06-09.orig/drivers/xen/xenbus/xenbus_comms.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/drivers/xen/xenbus/xenbus_comms.c 2009-06-09 15:36:07.000000000 +0200
+@@ -49,8 +49,8 @@
static int xenbus_irq;
-extern void xenbus_probe(void *);
-+extern void xenbus_probe(struct work_struct *);
- extern int xenstored_ready;
-static DECLARE_WORK(probe_work, xenbus_probe, NULL);
++extern void xenbus_probe(struct work_struct *);
+static DECLARE_WORK(probe_work, xenbus_probe);
static DECLARE_WAIT_QUEUE_HEAD(xb_waitq);
---- head-2009-05-19.orig/drivers/xen/xenbus/xenbus_probe.c 2009-05-19 09:44:31.000000000 +0200
-+++ head-2009-05-19/drivers/xen/xenbus/xenbus_probe.c 2009-05-19 09:49:01.000000000 +0200
-@@ -843,7 +843,7 @@ void unregister_xenstore_notifier(struct
+--- head-2009-06-09.orig/drivers/xen/xenbus/xenbus_probe.c 2009-06-09 15:32:13.000000000 +0200
++++ head-2009-06-09/drivers/xen/xenbus/xenbus_probe.c 2009-06-09 15:36:07.000000000 +0200
+@@ -848,7 +848,7 @@ void unregister_xenstore_notifier(struct
EXPORT_SYMBOL_GPL(unregister_xenstore_notifier);
-void xenbus_probe(void *unused)
+void xenbus_probe(struct work_struct *unused)
{
- BUG_ON((xenstored_ready <= 0));
+ BUG_ON(!is_xenstored_ready());
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/desc_32.h 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/desc_32.h 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/desc_32.h 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/desc_32.h 2009-06-09 15:36:07.000000000 +0200
@@ -4,8 +4,6 @@
#include <asm/ldt.h>
#include <asm/segment.h>
@@ -6313,8 +6312,8 @@ Acked-by: jbeulich@novell.com
#endif /* !__ASSEMBLY__ */
#endif
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/dma-mapping_32.h 2008-04-02 12:34:02.000000000 +0200
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/dma-mapping_32.h 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/dma-mapping_32.h 2008-04-02 12:34:02.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/dma-mapping_32.h 2009-06-09 15:36:07.000000000 +0200
@@ -127,10 +127,10 @@ dma_get_cache_alignment(void)
return (1 << INTERNODE_CACHE_SHIFT);
}
@@ -6328,8 +6327,8 @@ Acked-by: jbeulich@novell.com
enum dma_data_direction direction)
{
flush_write_buffers();
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/fixmap_32.h 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/fixmap_32.h 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/fixmap_32.h 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/fixmap_32.h 2009-06-09 15:36:07.000000000 +0200
@@ -13,13 +13,16 @@
#ifndef _ASM_FIXMAP_H
#define _ASM_FIXMAP_H
@@ -6348,8 +6347,8 @@ Acked-by: jbeulich@novell.com
#ifndef __ASSEMBLY__
#include <linux/kernel.h>
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/highmem.h 2008-10-29 09:55:56.000000000 +0100
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/highmem.h 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/highmem.h 2008-10-29 09:55:56.000000000 +0100
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/highmem.h 2009-06-09 15:36:07.000000000 +0200
@@ -85,7 +85,7 @@ static inline void clear_user_highpage(s
void copy_highpage(struct page *to, struct page *from);
@@ -6359,8 +6358,8 @@ Acked-by: jbeulich@novell.com
{
copy_highpage(to, from);
}
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/hypervisor.h 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/hypervisor.h 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/hypervisor.h 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/hypervisor.h 2009-06-09 15:36:07.000000000 +0200
@@ -46,15 +46,6 @@
#include <asm/percpu.h>
#include <asm/ptrace.h>
@@ -6377,8 +6376,8 @@ Acked-by: jbeulich@novell.com
extern shared_info_t *HYPERVISOR_shared_info;
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/irqflags_32.h 2007-06-12 13:14:02.000000000 +0200
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/irqflags_32.h 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/irqflags_32.h 2007-06-12 13:14:02.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/irqflags_32.h 2009-06-09 15:36:07.000000000 +0200
@@ -22,9 +22,6 @@
#define __raw_local_save_flags() (current_vcpu_info()->evtchn_upcall_mask)
@@ -6473,8 +6472,8 @@ Acked-by: jbeulich@novell.com
#endif /* __ASSEMBLY__ */
/*
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/mmu_context_32.h 2007-06-12 13:14:02.000000000 +0200
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/mmu_context_32.h 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/mmu_context_32.h 2007-06-12 13:14:02.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/mmu_context_32.h 2009-06-09 15:36:07.000000000 +0200
@@ -27,14 +27,13 @@ static inline void enter_lazy_tlb(struct
static inline void __prepare_arch_switch(void)
{
@@ -6514,8 +6513,8 @@ Acked-by: jbeulich@novell.com
static inline void activate_mm(struct mm_struct *prev, struct mm_struct *next)
{
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/pgtable-3level.h 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/pgtable-3level.h 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/pgtable-3level.h 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/pgtable-3level.h 2009-06-09 15:36:07.000000000 +0200
@@ -1,8 +1,6 @@
#ifndef _I386_PGTABLE_3LEVEL_H
#define _I386_PGTABLE_3LEVEL_H
@@ -6614,8 +6613,8 @@ Acked-by: jbeulich@novell.com
#define __pte_mfn(_pte) (((_pte).pte_low >> PAGE_SHIFT) | \
((_pte).pte_high << (32-PAGE_SHIFT)))
#define pte_mfn(_pte) ((_pte).pte_low & _PAGE_PRESENT ? \
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/pgtable_32.h 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/pgtable_32.h 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/pgtable_32.h 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/pgtable_32.h 2009-06-09 15:36:07.000000000 +0200
@@ -38,14 +38,14 @@ struct vm_area_struct;
#define ZERO_PAGE(vaddr) (virt_to_page(empty_zero_page))
extern unsigned long empty_zero_page[1024];
@@ -6664,8 +6663,8 @@ Acked-by: jbeulich@novell.com
#define __HAVE_ARCH_PTEP_GET_AND_CLEAR_FULL
#define ptep_get_and_clear_full(mm, addr, ptep, full) \
((full) ? ({ \
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/processor_32.h 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/processor_32.h 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/processor_32.h 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/processor_32.h 2009-06-09 15:36:07.000000000 +0200
@@ -20,6 +20,7 @@
#include <linux/threads.h>
#include <asm/percpu.h>
@@ -6944,8 +6943,8 @@ Acked-by: jbeulich@novell.com
+extern void secondary_cpu_init(void);
+
#endif /* __ASM_I386_PROCESSOR_H */
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/smp_32.h 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/smp_32.h 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/smp_32.h 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/smp_32.h 2009-06-09 15:36:07.000000000 +0200
@@ -8,6 +8,7 @@
#include <linux/kernel.h>
#include <linux/threads.h>
@@ -6963,8 +6962,8 @@ Acked-by: jbeulich@novell.com
extern cpumask_t cpu_possible_map;
#define cpu_callin_map cpu_possible_map
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/system_32.h 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/system_32.h 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/system_32.h 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/system_32.h 2009-06-09 15:36:07.000000000 +0200
@@ -139,17 +139,17 @@ __asm__ __volatile__ ("movw %%dx,%1\n\t"
#define write_cr4(x) \
__asm__ __volatile__("movl %0,%%cr4": :"r" (x))
@@ -6989,8 +6988,8 @@ Acked-by: jbeulich@novell.com
static inline unsigned long get_limit(unsigned long segment)
{
unsigned long __limit;
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/desc_64.h 2008-01-28 12:24:19.000000000 +0100
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/desc_64.h 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/desc_64.h 2008-01-28 12:24:19.000000000 +0100
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/desc_64.h 2009-06-09 15:36:07.000000000 +0200
@@ -9,62 +9,11 @@
#include <linux/string.h>
@@ -7055,8 +7054,8 @@ Acked-by: jbeulich@novell.com
extern struct desc_ptr idt_descr, cpu_gdt_descr[NR_CPUS];
extern struct desc_struct cpu_gdt_table[GDT_ENTRIES];
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/dma-mapping_64.h 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/dma-mapping_64.h 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/dma-mapping_64.h 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/dma-mapping_64.h 2009-06-09 15:36:07.000000000 +0200
@@ -64,6 +64,9 @@ static inline int dma_mapping_error(dma_
return (dma_addr == bad_dma_address);
}
@@ -7083,8 +7082,8 @@ Acked-by: jbeulich@novell.com
{
flush_write_buffers();
}
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/pgtable_64.h 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/pgtable_64.h 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/pgtable_64.h 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/pgtable_64.h 2009-06-09 15:36:07.000000000 +0200
@@ -237,19 +237,18 @@ extern unsigned int __kernel_page_user;
static inline unsigned long pgd_bad(pgd_t pgd)
@@ -7124,8 +7123,8 @@ Acked-by: jbeulich@novell.com
#define pfn_pmd(nr,prot) (__pmd(((nr) << PAGE_SHIFT) | pgprot_val(prot)))
#define pmd_pfn(x) ((pmd_val(x) & __PHYSICAL_MASK) >> PAGE_SHIFT)
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/processor_64.h 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/processor_64.h 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/processor_64.h 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/processor_64.h 2009-06-09 15:36:07.000000000 +0200
@@ -484,6 +484,14 @@ static inline void __mwait(unsigned long
: :"a" (eax), "c" (ecx));
}
@@ -7141,8 +7140,8 @@ Acked-by: jbeulich@novell.com
extern void mwait_idle_with_hints(unsigned long eax, unsigned long ecx);
#define stack_current() \
---- head-2009-05-19.orig/arch/x86/include/mach-xen/asm/smp_64.h 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/arch/x86/include/mach-xen/asm/smp_64.h 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/arch/x86/include/mach-xen/asm/smp_64.h 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/arch/x86/include/mach-xen/asm/smp_64.h 2009-06-09 15:36:07.000000000 +0200
@@ -88,11 +88,6 @@ extern u8 x86_cpu_to_log_apicid[NR_CPUS]
extern u8 bios_cpu_apicid[];
@@ -7169,8 +7168,8 @@ Acked-by: jbeulich@novell.com
#endif /* !CONFIG_SMP */
#endif
---- head-2009-05-19.orig/kernel/kexec.c 2009-05-19 09:48:34.000000000 +0200
-+++ head-2009-05-19/kernel/kexec.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/kernel/kexec.c 2009-06-09 15:32:16.000000000 +0200
++++ head-2009-06-09/kernel/kexec.c 2009-06-09 15:36:07.000000000 +0200
@@ -375,7 +375,7 @@ static struct page *kimage_alloc_pages(g
if (limit == ~0UL)
address_bits = BITS_PER_LONG;
@@ -7180,8 +7179,8 @@ Acked-by: jbeulich@novell.com
if (xen_limit_pages_to_max_mfn(pages, order, address_bits) < 0) {
__free_pages(pages, order);
---- head-2009-05-19.orig/net/core/dev.c 2009-05-19 09:48:43.000000000 +0200
-+++ head-2009-05-19/net/core/dev.c 2009-05-19 09:49:01.000000000 +0200
+--- head-2009-06-09.orig/net/core/dev.c 2009-06-09 15:35:38.000000000 +0200
++++ head-2009-06-09/net/core/dev.c 2009-06-09 15:36:07.000000000 +0200
@@ -1786,10 +1786,10 @@ inline int skb_checksum_setup(struct sk_
goto out;
switch (skb->nh.iph->protocol) {
diff --git a/patches.xen/xen3-patch-2.6.21 b/patches.xen/xen3-patch-2.6.21
index 2a68fe5084..867a42a925 100644
--- a/patches.xen/xen3-patch-2.6.21
+++ b/patches.xen/xen3-patch-2.6.21
@@ -6,8 +6,8 @@ Automatically created from "patches.kernel.org/patch-2.6.21" by xen-port-patches
Acked-by: jbeulich@novell.com
---- head-2009-05-04.orig/arch/x86/Kconfig 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/arch/x86/Kconfig 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/Kconfig 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/arch/x86/Kconfig 2009-05-29 11:58:57.000000000 +0200
@@ -60,13 +60,15 @@ config GENERIC_CMOS_UPDATE
config CLOCKSOURCE_WATCHDOG
@@ -25,9 +25,9 @@ Acked-by: jbeulich@novell.com
config LOCKDEP_SUPPORT
def_bool y
---- head-2009-05-04.orig/arch/x86/kernel/Makefile 2009-05-04 11:04:51.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/Makefile 2009-04-21 12:29:40.000000000 +0200
-@@ -129,7 +129,7 @@ ifeq ($(CONFIG_X86_64),y)
+--- head-2009-05-29.orig/arch/x86/kernel/Makefile 2009-05-29 11:57:00.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/Makefile 2009-05-29 11:58:57.000000000 +0200
+@@ -130,7 +130,7 @@ ifeq ($(CONFIG_X86_64),y)
pci-dma_64-$(CONFIG_XEN) += pci-dma_32.o
endif
@@ -37,8 +37,8 @@ Acked-by: jbeulich@novell.com
+ smpboot_$(BITS).o tsc_$(BITS).o tsc_sync.o
disabled-obj-$(CONFIG_XEN_UNPRIVILEGED_GUEST) += mpparse_64.o
%/head_$(BITS).o %/head_$(BITS).s: $(if $(CONFIG_XEN),EXTRA_AFLAGS,dummy) :=
---- head-2009-05-04.orig/arch/x86/kernel/apic_32-xen.c 2009-05-04 11:04:51.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/apic_32-xen.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/apic_32-xen.c 2009-05-29 11:57:00.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/apic_32-xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -25,6 +25,8 @@
#include <linux/kernel_stat.h>
#include <linux/sysdev.h>
@@ -135,8 +135,8 @@ Acked-by: jbeulich@novell.com
int setup_profiling_timer(unsigned int multiplier)
{
return -EINVAL;
---- head-2009-05-04.orig/arch/x86/kernel/cpu/common-xen.c 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/cpu/common-xen.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/cpu/common-xen.c 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/cpu/common-xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -612,7 +612,7 @@ void __init early_cpu_init(void)
struct pt_regs * __devinit idle_regs(struct pt_regs *regs)
{
@@ -182,8 +182,8 @@ Acked-by: jbeulich@novell.com
/* Clear all 6 debug registers: */
set_debugreg(0, 0);
---- head-2009-05-04.orig/arch/x86/kernel/e820_32-xen.c 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/e820_32-xen.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/e820_32-xen.c 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/e820_32-xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -14,6 +14,7 @@
#include <asm/pgtable.h>
#include <asm/page.h>
@@ -223,8 +223,8 @@ Acked-by: jbeulich@novell.com
return sum == 0;
}
---- head-2009-05-04.orig/arch/x86/kernel/entry_32-xen.S 2009-05-13 14:18:06.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/entry_32-xen.S 2009-05-13 12:34:03.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/entry_32-xen.S 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/entry_32-xen.S 2009-05-29 11:58:57.000000000 +0200
@@ -30,7 +30,7 @@
* 18(%esp) - %eax
* 1C(%esp) - %ds
@@ -589,8 +589,8 @@ Acked-by: jbeulich@novell.com
ENTRY(kernel_thread_helper)
pushl $0 # fake return address for unwinder
---- head-2009-05-04.orig/arch/x86/kernel/head_32-xen.S 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/head_32-xen.S 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/head_32-xen.S 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/head_32-xen.S 2009-05-29 11:58:57.000000000 +0200
@@ -27,6 +27,7 @@
#define X86_CAPABILITY new_cpu_data+CPUINFO_x86_capability
#define X86_VENDOR_ID new_cpu_data+CPUINFO_x86_vendor_id
@@ -623,8 +623,8 @@ Acked-by: jbeulich@novell.com
/* get the PDA pointer */
movl $boot_pda, %eax
---- head-2009-05-04.orig/arch/x86/kernel/io_apic_32-xen.c 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/io_apic_32-xen.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/io_apic_32-xen.c 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/io_apic_32-xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -167,7 +167,7 @@ static inline void io_apic_write(unsigne
*/
static inline void io_apic_modify(unsigned int apic, unsigned int reg, unsigned int value)
@@ -775,8 +775,8 @@ Acked-by: jbeulich@novell.com
spin_unlock_irqrestore(&ioapic_lock, flags);
return 0;
---- head-2009-05-04.orig/arch/x86/kernel/irq_32-xen.c 2009-05-04 11:04:51.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/irq_32-xen.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/irq_32-xen.c 2009-05-29 11:57:00.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/irq_32-xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -10,7 +10,6 @@
* io_apic.c.)
*/
@@ -823,8 +823,8 @@ Acked-by: jbeulich@novell.com
#ifdef CONFIG_4KSTACKS
/*
---- head-2009-05-04.orig/arch/x86/kernel/microcode-xen.c 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/microcode-xen.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/microcode-xen.c 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/microcode-xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -108,7 +108,7 @@ static ssize_t microcode_write (struct f
return ret;
}
@@ -834,8 +834,8 @@ Acked-by: jbeulich@novell.com
.owner = THIS_MODULE,
.write = microcode_write,
.open = microcode_open,
---- head-2009-05-04.orig/arch/x86/kernel/mpparse_32-xen.c 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/mpparse_32-xen.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/mpparse_32-xen.c 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/mpparse_32-xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -1079,7 +1079,7 @@ int mp_register_gsi(u32 gsi, int trigger
static int gsi_to_irq[MAX_GSI_NUM];
@@ -854,8 +854,8 @@ Acked-by: jbeulich@novell.com
gsi = pci_irq++;
gsi_to_irq[irq] = gsi;
} else {
---- head-2009-05-04.orig/arch/x86/kernel/pci-dma-xen.c 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/pci-dma-xen.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/pci-dma-xen.c 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/pci-dma-xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -311,7 +311,7 @@ int dma_declare_coherent_memory(struct d
return DMA_MEMORY_IO;
@@ -865,8 +865,8 @@ Acked-by: jbeulich@novell.com
out:
if (mem_base)
iounmap(mem_base);
---- head-2009-05-04.orig/arch/x86/kernel/pcspeaker.c 2008-12-25 00:26:37.000000000 +0100
-+++ head-2009-05-04/arch/x86/kernel/pcspeaker.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/pcspeaker.c 2009-05-29 10:35:23.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/pcspeaker.c 2009-05-29 11:58:57.000000000 +0200
@@ -6,6 +6,11 @@ static __init int add_pcspkr(void)
{
struct platform_device *pd;
@@ -879,8 +879,8 @@ Acked-by: jbeulich@novell.com
pd = platform_device_register_simple("pcspkr", -1, NULL, 0);
return IS_ERR(pd) ? PTR_ERR(pd) : 0;
---- head-2009-05-04.orig/arch/x86/kernel/process_32-xen.c 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/process_32-xen.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/process_32-xen.c 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/process_32-xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -38,6 +38,7 @@
#include <linux/ptrace.h>
#include <linux/random.h>
@@ -993,8 +993,8 @@ Acked-by: jbeulich@novell.com
return prev_p;
}
---- head-2009-05-04.orig/arch/x86/kernel/setup_32-xen.c 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/setup_32-xen.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/setup_32-xen.c 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/setup_32-xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -33,7 +33,6 @@
#include <linux/initrd.h>
#include <linux/bootmem.h>
@@ -1084,8 +1084,8 @@ Acked-by: jbeulich@novell.com
- * c-basic-offset:8
- * End:
- */
---- head-2009-05-04.orig/arch/x86/kernel/smp_32-xen.c 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/smp_32-xen.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/smp_32-xen.c 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/smp_32-xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -335,8 +335,7 @@ static void flush_tlb_others(cpumask_t c
/*
* i'm not happy about this global shared spinlock in the
@@ -1105,8 +1105,8 @@ Acked-by: jbeulich@novell.com
flush_mm = NULL;
flush_va = 0;
---- head-2009-05-04.orig/arch/x86/kernel/time_32-xen.c 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/time_32-xen.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/time_32-xen.c 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/time_32-xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -51,6 +51,7 @@
#include <linux/kernel_stat.h>
#include <linux/posix-timers.h>
@@ -1557,8 +1557,8 @@ Acked-by: jbeulich@novell.com
return 0;
}
__initcall(xen_sysctl_init);
---- head-2009-05-04.orig/arch/x86/kernel/traps_32-xen.c 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/traps_32-xen.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/traps_32-xen.c 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/traps_32-xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -100,6 +100,7 @@ asmlinkage void fixup_4gb_segment(void);
asmlinkage void machine_check(void);
@@ -1633,8 +1633,8 @@ Acked-by: jbeulich@novell.com
+ return 1;
+}
+__setup("code_bytes=", code_bytes_setup);
---- head-2009-05-04.orig/arch/x86/mm/fault_32-xen.c 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/arch/x86/mm/fault_32-xen.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/mm/fault_32-xen.c 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/arch/x86/mm/fault_32-xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -46,43 +46,17 @@ int unregister_page_fault_notifier(struc
}
EXPORT_SYMBOL_GPL(unregister_page_fault_notifier);
@@ -1705,8 +1705,8 @@ Acked-by: jbeulich@novell.com
return;
/* It's safe to allow irq's after cr2 has been saved and the vmalloc
---- head-2009-05-04.orig/arch/x86/mm/highmem_32-xen.c 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/arch/x86/mm/highmem_32-xen.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/mm/highmem_32-xen.c 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/arch/x86/mm/highmem_32-xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -33,14 +33,16 @@ static void *__kmap_atomic(struct page *
/* even !CONFIG_PREEMPT needs this, for in_atomic in do_page_fault */
@@ -1735,8 +1735,8 @@ Acked-by: jbeulich@novell.com
return (void*) vaddr;
}
---- head-2009-05-04.orig/arch/x86/mm/init_32-xen.c 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/arch/x86/mm/init_32-xen.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/mm/init_32-xen.c 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/arch/x86/mm/init_32-xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -66,6 +66,7 @@ static pmd_t * __init one_md_table_init(
#ifdef CONFIG_X86_PAE
@@ -1753,8 +1753,8 @@ Acked-by: jbeulich@novell.com
make_lowmem_page_readonly(page_table,
XENFEAT_writable_page_tables);
set_pmd(pmd, __pmd(__pa(page_table) | _PAGE_TABLE));
---- head-2009-05-04.orig/arch/x86/mm/pgtable_32-xen.c 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/arch/x86/mm/pgtable_32-xen.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/mm/pgtable_32-xen.c 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/arch/x86/mm/pgtable_32-xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -149,6 +149,8 @@ void __set_fixmap (enum fixed_addresses
void __init reserve_top_address(unsigned long reserve)
{
@@ -1834,8 +1834,8 @@ Acked-by: jbeulich@novell.com
kmem_cache_free(pmd_cache, pmd);
}
---- head-2009-05-04.orig/arch/x86/ia32/ia32entry-xen.S 2009-05-04 11:04:51.000000000 +0200
-+++ head-2009-05-04/arch/x86/ia32/ia32entry-xen.S 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/ia32/ia32entry-xen.S 2009-05-29 11:57:00.000000000 +0200
++++ head-2009-05-29/arch/x86/ia32/ia32entry-xen.S 2009-05-29 11:58:57.000000000 +0200
@@ -465,7 +465,7 @@ ia32_sys_call_table:
.quad sys32_vm86_warning /* vm86old */
.quad compat_sys_wait4
@@ -1860,8 +1860,8 @@ Acked-by: jbeulich@novell.com
.quad sys_getcpu
+ .quad sys_epoll_pwait
ia32_syscall_end:
---- head-2009-05-04.orig/arch/x86/kernel/acpi/sleep_64-xen.c 2009-05-13 14:06:17.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/acpi/sleep_64-xen.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/acpi/sleep_64-xen.c 2008-04-15 09:29:41.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/acpi/sleep_64-xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -59,7 +59,7 @@ unsigned long acpi_wakeup_address = 0;
unsigned long acpi_video_flags;
extern char wakeup_start, wakeup_end;
@@ -1883,8 +1883,8 @@ Acked-by: jbeulich@novell.com
local_flush_tlb();
}
#endif
---- head-2009-05-04.orig/arch/x86/kernel/e820_64-xen.c 2009-05-04 11:04:51.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/e820_64-xen.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/e820_64-xen.c 2009-05-29 11:57:00.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/e820_64-xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -88,6 +88,13 @@ static inline int bad_addr(unsigned long
return 1;
}
@@ -1946,8 +1946,8 @@ Acked-by: jbeulich@novell.com
{
if (userdef) {
printk(KERN_INFO "user-defined physical RAM map:\n");
---- head-2009-05-04.orig/arch/x86/kernel/entry_64-xen.S 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/entry_64-xen.S 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/entry_64-xen.S 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/entry_64-xen.S 2009-05-29 11:58:57.000000000 +0200
@@ -629,6 +629,9 @@ END(invalidate_interrupt\num)
ENTRY(call_function_interrupt)
apicinterrupt CALL_FUNCTION_VECTOR,smp_call_function_interrupt
@@ -1958,8 +1958,8 @@ Acked-by: jbeulich@novell.com
#endif
ENTRY(apic_timer_interrupt)
---- head-2009-05-04.orig/arch/x86/kernel/head64-xen.c 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/head64-xen.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/head64-xen.c 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/head64-xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -45,8 +45,6 @@ static void __init clear_bss(void)
#define OLD_CL_BASE_ADDR 0x90000
#define OLD_CL_OFFSET 0x90022
@@ -1987,8 +1987,8 @@ Acked-by: jbeulich@novell.com
#endif
}
---- head-2009-05-04.orig/arch/x86/kernel/io_apic_64-xen.c 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/io_apic_64-xen.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/io_apic_64-xen.c 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/io_apic_64-xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -36,6 +36,7 @@
#include <acpi/acpi_bus.h>
#endif
@@ -2803,8 +2803,8 @@ Acked-by: jbeulich@novell.com
else
set_ioapic_affinity_irq(irq, TARGET_CPUS);
}
---- head-2009-05-04.orig/arch/x86/kernel/irq_64-xen.c 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/irq_64-xen.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/irq_64-xen.c 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/irq_64-xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -18,6 +18,7 @@
#include <asm/uaccess.h>
#include <asm/io_apic.h>
@@ -2832,8 +2832,8 @@ Acked-by: jbeulich@novell.com
/*irq_exit();*/
---- head-2009-05-04.orig/arch/x86/kernel/mpparse_64-xen.c 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/mpparse_64-xen.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/mpparse_64-xen.c 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/mpparse_64-xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -60,9 +60,9 @@ unsigned long mp_lapic_addr = 0;
/* Processor that is doing the boot up */
unsigned int boot_cpu_id = -1U;
@@ -2855,8 +2855,8 @@ Acked-by: jbeulich@novell.com
return gsi;
ioapic = mp_find_ioapic(gsi);
---- head-2009-05-04.orig/arch/x86/kernel/process_64-xen.c 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/process_64-xen.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/process_64-xen.c 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/process_64-xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -338,14 +338,17 @@ void load_gs_index(unsigned gs)
void flush_thread(void)
{
@@ -2880,8 +2880,8 @@ Acked-by: jbeulich@novell.com
tsk->thread.debugreg0 = 0;
tsk->thread.debugreg1 = 0;
---- head-2009-05-04.orig/arch/x86/kernel/setup_64-xen.c 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/setup_64-xen.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/setup_64-xen.c 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/setup_64-xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -141,7 +141,7 @@ EXPORT_SYMBOL_GPL(edid_info);
extern int root_mountflags;
@@ -3155,8 +3155,8 @@ Acked-by: jbeulich@novell.com
-}
-device_initcall(add_pcspkr);
-#endif
---- head-2009-05-04.orig/arch/x86/kernel/vsyscall_64-xen.c 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/arch/x86/kernel/vsyscall_64-xen.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/kernel/vsyscall_64-xen.c 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/arch/x86/kernel/vsyscall_64-xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -26,6 +26,7 @@
#include <linux/seqlock.h>
#include <linux/jiffies.h>
@@ -3374,8 +3374,8 @@ Acked-by: jbeulich@novell.com
#endif
on_each_cpu(cpu_vsyscall_init, NULL, 0, 1);
hotcpu_notifier(cpu_vsyscall_notifier, 0);
---- head-2009-05-04.orig/arch/x86/mm/fault_64-xen.c 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/arch/x86/mm/fault_64-xen.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/mm/fault_64-xen.c 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/arch/x86/mm/fault_64-xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -56,38 +56,17 @@ int unregister_page_fault_notifier(struc
}
EXPORT_SYMBOL_GPL(unregister_page_fault_notifier);
@@ -3441,8 +3441,8 @@ Acked-by: jbeulich@novell.com
return;
if (likely(regs->eflags & X86_EFLAGS_IF))
---- head-2009-05-04.orig/arch/x86/mm/init_64-xen.c 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/arch/x86/mm/init_64-xen.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/mm/init_64-xen.c 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/arch/x86/mm/init_64-xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -1108,20 +1108,30 @@ int kern_addr_valid(unsigned long addr)
extern int exception_trace, page_fault_trace;
@@ -3481,8 +3481,8 @@ Acked-by: jbeulich@novell.com
return 0;
}
__initcall(x8664_sysctl_init);
---- head-2009-05-04.orig/arch/x86/mm/pageattr_64-xen.c 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/arch/x86/mm/pageattr_64-xen.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/arch/x86/mm/pageattr_64-xen.c 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/arch/x86/mm/pageattr_64-xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -350,8 +350,8 @@ static void flush_kernel_map(void *arg)
void *adr = page_address(pg);
if (cpu_has_clflush)
@@ -3511,8 +3511,8 @@ Acked-by: jbeulich@novell.com
large_pte = pte_mkhuge(large_pte);
set_pte((pte_t *)pmd, large_pte);
}
---- head-2009-05-04.orig/drivers/acpi/processor_extcntl.c 2009-05-13 14:06:17.000000000 +0200
-+++ head-2009-05-04/drivers/acpi/processor_extcntl.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/drivers/acpi/processor_extcntl.c 2009-05-29 11:30:17.000000000 +0200
++++ head-2009-05-29/drivers/acpi/processor_extcntl.c 2009-05-29 11:58:57.000000000 +0200
@@ -32,9 +32,8 @@
#define ACPI_PROCESSOR_COMPONENT 0x01000000
@@ -3553,8 +3553,8 @@ Acked-by: jbeulich@novell.com
if (ACPI_FAILURE(status))
return status;
---- head-2009-05-04.orig/drivers/char/tpm/tpm_xen.c 2009-05-04 11:04:51.000000000 +0200
-+++ head-2009-05-04/drivers/char/tpm/tpm_xen.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/drivers/char/tpm/tpm_xen.c 2009-05-29 11:57:00.000000000 +0200
++++ head-2009-05-29/drivers/char/tpm/tpm_xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -481,7 +481,6 @@ static struct xenbus_device_id tpmfront_
static struct xenbus_driver tpmfront = {
@@ -3575,8 +3575,8 @@ Acked-by: jbeulich@novell.com
}
static int tpmif_allocate_tx_buffers(struct tpm_private *tp)
---- head-2009-05-04.orig/drivers/pci/msi-xen.c 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/drivers/pci/msi-xen.c 2009-04-24 09:57:24.000000000 +0200
+--- head-2009-05-29.orig/drivers/pci/msi-xen.c 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/drivers/pci/msi-xen.c 2009-05-29 11:58:57.000000000 +0200
@@ -36,8 +36,6 @@ struct msi_dev_list {
struct list_head list;
spinlock_t pirq_list_lock;
@@ -4088,8 +4088,8 @@ Acked-by: jbeulich@novell.com
dev->irq = msi_dev_entry->default_irq;
}
---- head-2009-05-04.orig/drivers/xen/balloon/sysfs.c 2009-05-13 14:06:17.000000000 +0200
-+++ head-2009-05-04/drivers/xen/balloon/sysfs.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/drivers/xen/balloon/sysfs.c 2009-03-18 10:39:31.000000000 +0100
++++ head-2009-05-29/drivers/xen/balloon/sysfs.c 2009-05-29 11:58:57.000000000 +0200
@@ -34,6 +34,7 @@
#include <linux/stat.h>
#include <linux/string.h>
@@ -4098,8 +4098,8 @@ Acked-by: jbeulich@novell.com
#include "common.h"
#ifdef HAVE_XEN_PLATFORM_COMPAT_H
---- head-2009-05-04.orig/drivers/xen/blkback/xenbus.c 2009-05-13 14:06:17.000000000 +0200
-+++ head-2009-05-04/drivers/xen/blkback/xenbus.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/drivers/xen/blkback/xenbus.c 2008-05-08 14:02:04.000000000 +0200
++++ head-2009-05-29/drivers/xen/blkback/xenbus.c 2009-05-29 11:58:57.000000000 +0200
@@ -527,7 +527,6 @@ static const struct xenbus_device_id blk
static struct xenbus_driver blkback = {
@@ -4116,8 +4116,8 @@ Acked-by: jbeulich@novell.com
+ if (xenbus_register_backend(&blkback))
+ BUG();
}
---- head-2009-05-04.orig/drivers/xen/blkfront/blkfront.c 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/drivers/xen/blkfront/blkfront.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/drivers/xen/blkfront/blkfront.c 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/drivers/xen/blkfront/blkfront.c 2009-05-29 11:58:57.000000000 +0200
@@ -902,7 +902,6 @@ MODULE_ALIAS("xen:vbd");
static struct xenbus_driver blkfront = {
@@ -4126,8 +4126,8 @@ Acked-by: jbeulich@novell.com
.ids = blkfront_ids,
.probe = blkfront_probe,
.remove = blkfront_remove,
---- head-2009-05-04.orig/drivers/xen/blktap/xenbus.c 2009-05-13 14:06:17.000000000 +0200
-+++ head-2009-05-04/drivers/xen/blktap/xenbus.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/drivers/xen/blktap/xenbus.c 2008-09-15 13:40:15.000000000 +0200
++++ head-2009-05-29/drivers/xen/blktap/xenbus.c 2009-05-29 11:58:57.000000000 +0200
@@ -465,7 +465,6 @@ static const struct xenbus_device_id blk
static struct xenbus_driver blktap = {
@@ -4144,8 +4144,8 @@ Acked-by: jbeulich@novell.com
+ if (xenbus_register_backend(&blktap))
+ BUG();
}
---- head-2009-05-04.orig/drivers/xen/core/evtchn.c 2009-05-04 11:04:51.000000000 +0200
-+++ head-2009-05-04/drivers/xen/core/evtchn.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/drivers/xen/core/evtchn.c 2009-05-29 11:57:00.000000000 +0200
++++ head-2009-05-29/drivers/xen/core/evtchn.c 2009-05-29 11:58:57.000000000 +0200
@@ -145,7 +145,7 @@ static void bind_evtchn_to_cpu(unsigned
BUG_ON(!test_bit(chn, s->evtchn_mask));
@@ -4172,8 +4172,8 @@ Acked-by: jbeulich@novell.com
.mask = mask_dynirq,
.unmask = unmask_dynirq,
.mask_ack = ack_dynirq,
---- head-2009-05-04.orig/drivers/xen/core/smpboot.c 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/drivers/xen/core/smpboot.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/drivers/xen/core/smpboot.c 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/drivers/xen/core/smpboot.c 2009-05-29 11:58:57.000000000 +0200
@@ -117,7 +117,7 @@ static int __cpuinit xen_smp_intr_init(u
rc = bind_ipi_to_irqhandler(RESCHEDULE_VECTOR,
cpu,
@@ -4233,8 +4233,8 @@ Acked-by: jbeulich@novell.com
cpu_data[cpu] = boot_cpu_data;
cpu_data[cpu].apicid = apicid;
---- head-2009-05-04.orig/drivers/xen/fbfront/xenfb.c 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/drivers/xen/fbfront/xenfb.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/drivers/xen/fbfront/xenfb.c 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/drivers/xen/fbfront/xenfb.c 2009-05-29 11:58:57.000000000 +0200
@@ -857,7 +857,6 @@ MODULE_ALIAS("xen:vfb");
static struct xenbus_driver xenfb_driver = {
@@ -4243,8 +4243,8 @@ Acked-by: jbeulich@novell.com
.ids = xenfb_ids,
.probe = xenfb_probe,
.remove = xenfb_remove,
---- head-2009-05-04.orig/drivers/xen/fbfront/xenkbd.c 2009-05-04 11:04:51.000000000 +0200
-+++ head-2009-05-04/drivers/xen/fbfront/xenkbd.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/drivers/xen/fbfront/xenkbd.c 2009-05-29 11:57:00.000000000 +0200
++++ head-2009-05-29/drivers/xen/fbfront/xenkbd.c 2009-05-29 11:58:57.000000000 +0200
@@ -323,7 +323,6 @@ MODULE_ALIAS("xen:vkbd");
static struct xenbus_driver xenkbd_driver = {
@@ -4253,8 +4253,8 @@ Acked-by: jbeulich@novell.com
.ids = xenkbd_ids,
.probe = xenkbd_probe,
.remove = xenkbd_remove,
---- head-2009-05-04.orig/drivers/xen/netback/interface.c 2009-05-13 14:06:17.000000000 +0200
-+++ head-2009-05-04/drivers/xen/netback/interface.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/drivers/xen/netback/interface.c 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-05-29/drivers/xen/netback/interface.c 2009-05-29 11:58:57.000000000 +0200
@@ -120,7 +120,7 @@ static void netbk_get_drvinfo(struct net
struct ethtool_drvinfo *info)
{
@@ -4264,8 +4264,8 @@ Acked-by: jbeulich@novell.com
}
static const struct netif_stat {
---- head-2009-05-04.orig/drivers/xen/netback/xenbus.c 2009-05-13 14:06:17.000000000 +0200
-+++ head-2009-05-04/drivers/xen/netback/xenbus.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/drivers/xen/netback/xenbus.c 2009-03-18 10:39:32.000000000 +0100
++++ head-2009-05-29/drivers/xen/netback/xenbus.c 2009-05-29 11:58:57.000000000 +0200
@@ -439,7 +439,6 @@ static const struct xenbus_device_id net
static struct xenbus_driver netback = {
@@ -4282,8 +4282,8 @@ Acked-by: jbeulich@novell.com
+ if (xenbus_register_backend(&netback))
+ BUG();
}
---- head-2009-05-04.orig/drivers/xen/netfront/netfront.c 2009-05-04 11:04:51.000000000 +0200
-+++ head-2009-05-04/drivers/xen/netfront/netfront.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/drivers/xen/netfront/netfront.c 2009-05-29 11:57:00.000000000 +0200
++++ head-2009-05-29/drivers/xen/netfront/netfront.c 2009-05-29 11:58:57.000000000 +0200
@@ -1892,20 +1892,19 @@ static struct ethtool_ops network_ethtoo
};
@@ -4401,8 +4401,8 @@ Acked-by: jbeulich@novell.com
.ids = netfront_ids,
.probe = netfront_probe,
.remove = __devexit_p(netfront_remove),
---- head-2009-05-04.orig/drivers/xen/pciback/xenbus.c 2009-05-04 11:05:00.000000000 +0200
-+++ head-2009-05-04/drivers/xen/pciback/xenbus.c 2009-04-21 12:29:40.000000000 +0200
+--- head-2009-05-29.orig/drivers/xen/pciback/xenbus.c 2009-05-29 11:57:37.000000000 +0200
++++ head-2009-05-29/drivers/xen/pciback/xenbus.c 2009-05-29 11:58:57.000000000 +0200
@@ -683,7 +683,6 @@ static const struct xenbus_device_id xen
static struct xenbus_driver xenbus_pciback_driver = {
@@ -4411,8 +4411,8 @@ Acked-by: jbeulich@novell.com
.ids = xenpci_ids,
.probe = pciback_xenbus_probe,
.remove = pciback_xenbus_remove,
---- head-2009-05-04.orig/drivers/xen/pci