]> xenbits.xensource.com Git - xen.git/commitdiff
pv-on-hvm: fixes for unmodified drivers build and modern Linux
authorKeir Fraser <keir@xensource.com>
Thu, 25 Oct 2007 14:54:19 +0000 (15:54 +0100)
committerKeir Fraser <keir@xensource.com>
Thu, 25 Oct 2007 14:54:19 +0000 (15:54 +0100)
- The adjustments to README and overrides.mk are generic.
- The removal of explicit linux/config.h inclusion should also not
  cause any issues.
- The introduction of irq_handler_t should eliminiate warnings on
  2.6.19+ kernels (I didn't check they're there, but since the
  request_irq prototype changed, I'm sure there's at least
  one. However, as a result changes to the Linux tree are expected to
  be required.
- The change setup_xen_features -> xen_setup_features follows the
  naming in mainline 2.6.23 but would apparently also require changes
  to the Linux tree.
- The changes SA_* -> IRQF_ and  pci_module_init ->
  pci_register_driver should also not cause issues.

Signed-off-by: Jan Beulich <jbeulich@novell.com>
unmodified_drivers/linux-2.6/README
unmodified_drivers/linux-2.6/compat-include/xen/platform-compat.h
unmodified_drivers/linux-2.6/overrides.mk
unmodified_drivers/linux-2.6/platform-pci/evtchn.c
unmodified_drivers/linux-2.6/platform-pci/machine_reboot.c
unmodified_drivers/linux-2.6/platform-pci/platform-pci.c

index f46da3d3aa01f80136a3cc1e88d892d425f1283e..18d451c69ce5075af863072f77282c76984d896c 100644 (file)
@@ -1,12 +1,12 @@
 To build:
 
 1. ./mkbuildtree
-   NB. You can override paths to Xen sources and XenLinux sources via
-       the XEN and XL environment variable.
+   NB. You can override paths to Xen sources and a (stub) XenLinux
+       build tree via the XEN and XL environment variable.
 
-2. make -C /path/to/kernel/source M=$PWD modules
-   NB. The kernel sources here are your native kernel build tree, not
-       the XenLinux sources referred to in step 1.
+2. make -C /path/to/kernel/build M=$PWD modules
+   NB. This is your native kernel build tree (or a distro provided
+       stub), not the XenLinux sources referred to in step 1.
 
 You get four modules, xen-platform-pci.ko, xenbus.ko, xen-vbd.ko, and
 xen-vnif.ko.  Load xen-platform-pci first, then xenbus, and then
index 54a81f6ee9461c28d0cc90bf2333253c59c4dd42..c720d6e9be923462b64e90e7fea7bc3937b70178 100644 (file)
@@ -125,4 +125,12 @@ extern char *kasprintf(gfp_t gfp, const char *fmt, ...)
 #define DEFINE_RWLOCK(x) rwlock_t x = RW_LOCK_UNLOCKED
 #endif
 
+#if defined(_LINUX_INTERRUPT_H) && LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
+typedef irqreturn_t (*irq_handler_t)(int, void *, struct pt_regs *);
+#endif
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)
+#define setup_xen_features xen_setup_features
+#endif
+
 #endif
index db791e75efdca1094ef1f0d006e2320568345f98..643d814c56fd4f7594b78ab9ce8c7391c6fc7967 100644 (file)
@@ -11,4 +11,4 @@ ifeq ($(ARCH),ia64)
   EXTRA_CFLAGS += -DCONFIG_VMX_GUEST
 endif
 
-EXTRA_CFLAGS += -include $(srctree)/include/linux/autoconf.h
+EXTRA_CFLAGS += -include $(objtree)/include/linux/autoconf.h
index 64bd7ca3ea76351d4a81bda085dc99149251a69a..2efa6a353d0863335b46e5476860db29dec99336 100644 (file)
@@ -28,7 +28,6 @@
  * IN THE SOFTWARE.
  */
 
-#include <linux/config.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/spinlock.h>
@@ -48,7 +47,7 @@ void *shared_info_area;
 
 static struct {
        spinlock_t lock;
-       irqreturn_t(*handler) (int, void *, struct pt_regs *);
+       irq_handler_t handler;
        void *dev_id;
        int evtchn;
        int close:1; /* close on unbind_from_irqhandler()? */
@@ -146,7 +145,7 @@ EXPORT_SYMBOL(unmask_evtchn);
 
 int bind_listening_port_to_irqhandler(
        unsigned int remote_domain,
-       irqreturn_t (*handler)(int, void *, struct pt_regs *),
+       irq_handler_t handler,
        unsigned long irqflags,
        const char *devname,
        void *dev_id)
@@ -187,7 +186,7 @@ EXPORT_SYMBOL(bind_listening_port_to_irqhandler);
 
 int bind_caller_port_to_irqhandler(
        unsigned int caller_port,
-       irqreturn_t (*handler)(int, void *, struct pt_regs *),
+       irq_handler_t handler,
        unsigned long irqflags,
        const char *devname,
        void *dev_id)
@@ -254,13 +253,18 @@ void notify_remote_via_irq(int irq)
 }
 EXPORT_SYMBOL(notify_remote_via_irq);
 
-static irqreturn_t evtchn_interrupt(int irq, void *dev_id,
-                                   struct pt_regs *regs)
+static irqreturn_t evtchn_interrupt(int irq, void *dev_id
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
+                                   , struct pt_regs *regs
+#else
+# define handler(irq, dev_id, regs) handler(irq, dev_id)
+#endif
+                                   )
 {
        unsigned int l1i, port;
        /* XXX: All events are bound to vcpu0 but irq may be redirected. */
        int cpu = 0; /*smp_processor_id();*/
-       irqreturn_t(*handler) (int, void *, struct pt_regs *);
+       irq_handler_t handler;
        shared_info_t *s = shared_info_area;
        vcpu_info_t *v = &s->vcpu_info[cpu];
        unsigned long l1, l2;
@@ -331,6 +335,10 @@ int xen_irq_init(struct pci_dev *pdev)
                spin_lock_init(&irq_evtchn[irq].lock);
 
        return request_irq(pdev->irq, evtchn_interrupt,
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22)
                           SA_SHIRQ | SA_SAMPLE_RANDOM | SA_INTERRUPT,
+#else
+                          IRQF_SHARED | IRQF_SAMPLE_RANDOM | IRQF_DISABLED,
+#endif
                           "xen-platform-pci", pdev);
 }
index 2c225b76ac583c781455d84e895c3ccae2f569dd..cb8cded198ce058d3c36748eafc1f41cdddb26fb 100644 (file)
@@ -1,4 +1,3 @@
-#include <linux/config.h>
 #include <linux/cpumask.h>
 #include <linux/preempt.h>
 #include <xen/evtchn.h>
index e147f3d59a6b94c9556c46eda8319198086015c4..7a512073d23aa944f50f8383f69dea368ece349a 100644 (file)
@@ -367,7 +367,11 @@ static int __init platform_pci_module_init(void)
 {
        int rc;
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10)
        rc = pci_module_init(&platform_driver);
+#else
+       rc = pci_register_driver(&platform_driver);
+#endif
        if (rc) {
                printk(KERN_INFO DRV_NAME
                       ": No platform pci device model found\n");