From bb59a254afbc5cef94d6b02d707bcf6906c59b05 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Thu, 25 Oct 2007 15:54:19 +0100 Subject: pv-on-hvm: fixes for unmodified drivers build and modern Linux - 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 --- unmodified_drivers/linux-2.6/README | 10 +++++----- .../linux-2.6/compat-include/xen/platform-compat.h | 8 ++++++++ unmodified_drivers/linux-2.6/overrides.mk | 2 +- unmodified_drivers/linux-2.6/platform-pci/evtchn.c | 22 +++++++++++++++------- .../linux-2.6/platform-pci/machine_reboot.c | 1 - .../linux-2.6/platform-pci/platform-pci.c | 4 ++++ 6 files changed, 33 insertions(+), 14 deletions(-) (limited to 'unmodified_drivers') diff --git a/unmodified_drivers/linux-2.6/README b/unmodified_drivers/linux-2.6/README index f46da3d3aa..18d451c69c 100644 --- a/unmodified_drivers/linux-2.6/README +++ b/unmodified_drivers/linux-2.6/README @@ -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 diff --git a/unmodified_drivers/linux-2.6/compat-include/xen/platform-compat.h b/unmodified_drivers/linux-2.6/compat-include/xen/platform-compat.h index 54a81f6ee9..c720d6e9be 100644 --- a/unmodified_drivers/linux-2.6/compat-include/xen/platform-compat.h +++ b/unmodified_drivers/linux-2.6/compat-include/xen/platform-compat.h @@ -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 diff --git a/unmodified_drivers/linux-2.6/overrides.mk b/unmodified_drivers/linux-2.6/overrides.mk index db791e75ef..643d814c56 100644 --- a/unmodified_drivers/linux-2.6/overrides.mk +++ b/unmodified_drivers/linux-2.6/overrides.mk @@ -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 diff --git a/unmodified_drivers/linux-2.6/platform-pci/evtchn.c b/unmodified_drivers/linux-2.6/platform-pci/evtchn.c index 64bd7ca3ea..2efa6a353d 100644 --- a/unmodified_drivers/linux-2.6/platform-pci/evtchn.c +++ b/unmodified_drivers/linux-2.6/platform-pci/evtchn.c @@ -28,7 +28,6 @@ * IN THE SOFTWARE. */ -#include #include #include #include @@ -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); } diff --git a/unmodified_drivers/linux-2.6/platform-pci/machine_reboot.c b/unmodified_drivers/linux-2.6/platform-pci/machine_reboot.c index 2c225b76ac..cb8cded198 100644 --- a/unmodified_drivers/linux-2.6/platform-pci/machine_reboot.c +++ b/unmodified_drivers/linux-2.6/platform-pci/machine_reboot.c @@ -1,4 +1,3 @@ -#include #include #include #include diff --git a/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c b/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c index e147f3d59a..7a512073d2 100644 --- a/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c +++ b/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c @@ -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"); -- cgit v1.2.3