diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2016-03-22 12:55:17 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-03-22 12:55:17 -0700 |
commit | 55fc733c7e1de05a03237d857f4fe6dcec52d8d9 (patch) | |
tree | a3f5d48c02fc9d0cf569519e645709cac9bf8d1c | |
parent | b852495908cd1b02ad47672a83f622ad4264801b (diff) | |
parent | e01dc539df3ada9061a1097224513236b5381349 (diff) | |
download | linux-55fc733c7e1de05a03237d857f4fe6dcec52d8d9.tar.bz2 |
Merge tag 'for-linus-4.6-rc0-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip
Pull xen updates from David Vrabel:
"Features and fixes for 4.6:
- Make earlyprintk=xen work for HVM guests
- Remove module support for things never built as modules"
* tag 'for-linus-4.6-rc0-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip:
drivers/xen: make platform-pci.c explicitly non-modular
drivers/xen: make sys-hypervisor.c explicitly non-modular
drivers/xen: make xenbus_dev_[front/back]end explicitly non-modular
drivers/xen: make [xen-]ballon explicitly non-modular
xen: audit usages of module.h ; remove unnecessary instances
xen/x86: Drop mode-selecting ifdefs in startup_xen()
xen/x86: Zero out .bss for PV guests
hvc_xen: make early_printk work with HVM guests
hvc_xen: fix xenboot for DomUs
hvc_xen: add earlycon support
-rw-r--r-- | arch/arm/include/asm/xen/hypercall.h | 2 | ||||
-rw-r--r-- | arch/x86/xen/xen-head.S | 19 | ||||
-rw-r--r-- | drivers/tty/hvc/hvc_xen.c | 75 | ||||
-rw-r--r-- | drivers/xen/balloon.c | 4 | ||||
-rw-r--r-- | drivers/xen/events/events_2l.c | 1 | ||||
-rw-r--r-- | drivers/xen/events/events_base.c | 2 | ||||
-rw-r--r-- | drivers/xen/events/events_fifo.c | 1 | ||||
-rw-r--r-- | drivers/xen/features.c | 2 | ||||
-rw-r--r-- | drivers/xen/grant-table.c | 1 | ||||
-rw-r--r-- | drivers/xen/platform-pci.c | 22 | ||||
-rw-r--r-- | drivers/xen/sys-hypervisor.c | 59 | ||||
-rw-r--r-- | drivers/xen/xen-balloon.c | 14 | ||||
-rw-r--r-- | drivers/xen/xen-pciback/conf_space.c | 2 | ||||
-rw-r--r-- | drivers/xen/xen-pciback/pciback_ops.c | 2 | ||||
-rw-r--r-- | drivers/xen/xen-pciback/xenbus.c | 2 | ||||
-rw-r--r-- | drivers/xen/xen-selfballoon.c | 1 | ||||
-rw-r--r-- | drivers/xen/xenbus/xenbus_dev_backend.c | 13 | ||||
-rw-r--r-- | drivers/xen/xenbus/xenbus_dev_frontend.c | 13 | ||||
-rw-r--r-- | drivers/xen/xenbus/xenbus_xs.c | 1 | ||||
-rw-r--r-- | drivers/xen/xenfs/xensyms.c | 1 |
20 files changed, 101 insertions, 136 deletions
diff --git a/arch/arm/include/asm/xen/hypercall.h b/arch/arm/include/asm/xen/hypercall.h index d769972db8cb..b6b962d70db9 100644 --- a/arch/arm/include/asm/xen/hypercall.h +++ b/arch/arm/include/asm/xen/hypercall.h @@ -33,6 +33,8 @@ #ifndef _ASM_ARM_XEN_HYPERCALL_H #define _ASM_ARM_XEN_HYPERCALL_H +#include <linux/bug.h> + #include <xen/interface/xen.h> #include <xen/interface/sched.h> #include <xen/interface/platform.h> diff --git a/arch/x86/xen/xen-head.S b/arch/x86/xen/xen-head.S index b65f59a358a2..de93b20fa0d2 100644 --- a/arch/x86/xen/xen-head.S +++ b/arch/x86/xen/xen-head.S @@ -38,13 +38,18 @@ __INIT ENTRY(startup_xen) cld -#ifdef CONFIG_X86_32 - mov %esi,xen_start_info - mov $init_thread_union+THREAD_SIZE,%esp -#else - mov %rsi,xen_start_info - mov $init_thread_union+THREAD_SIZE,%rsp -#endif + + /* Clear .bss */ + xor %eax,%eax + mov $__bss_start, %_ASM_DI + mov $__bss_stop, %_ASM_CX + sub %_ASM_DI, %_ASM_CX + shr $__ASM_SEL(2, 3), %_ASM_CX + rep __ASM_SIZE(stos) + + mov %_ASM_SI, xen_start_info + mov $init_thread_union+THREAD_SIZE, %_ASM_SP + jmp xen_start_kernel __FINIT diff --git a/drivers/tty/hvc/hvc_xen.c b/drivers/tty/hvc/hvc_xen.c index f417fa1ee47c..5e87e4866bcb 100644 --- a/drivers/tty/hvc/hvc_xen.c +++ b/drivers/tty/hvc/hvc_xen.c @@ -25,6 +25,7 @@ #include <linux/init.h> #include <linux/types.h> #include <linux/list.h> +#include <linux/serial_core.h> #include <asm/io.h> #include <asm/xen/hypervisor.h> @@ -245,6 +246,18 @@ err: return -ENODEV; } +static int xencons_info_pv_init(struct xencons_info *info, int vtermno) +{ + info->evtchn = xen_start_info->console.domU.evtchn; + /* GFN == MFN for PV guest */ + info->intf = gfn_to_virt(xen_start_info->console.domU.mfn); + info->vtermno = vtermno; + + list_add_tail(&info->list, &xenconsoles); + + return 0; +} + static int xen_pv_console_init(void) { struct xencons_info *info; @@ -264,13 +277,8 @@ static int xen_pv_console_init(void) /* already configured */ return 0; } - info->evtchn = xen_start_info->console.domU.evtchn; - /* GFN == MFN for PV guest */ - info->intf = gfn_to_virt(xen_start_info->console.domU.mfn); - info->vtermno = HVC_COOKIE; - spin_lock(&xencons_lock); - list_add_tail(&info->list, &xenconsoles); + xencons_info_pv_init(info, HVC_COOKIE); spin_unlock(&xencons_lock); return 0; @@ -597,15 +605,39 @@ static int xen_cons_init(void) } console_initcall(xen_cons_init); +#ifdef CONFIG_X86 +static void xen_hvm_early_write(uint32_t vtermno, const char *str, int len) +{ + if (xen_cpuid_base()) + outsb(0xe9, str, len); +} +#else +static void xen_hvm_early_write(uint32_t vtermno, const char *str, int len) { } +#endif + #ifdef CONFIG_EARLY_PRINTK +static int __init xenboot_setup_console(struct console *console, char *string) +{ + static struct xencons_info xenboot; + + if (xen_initial_domain()) + return 0; + if (!xen_pv_domain()) + return -ENODEV; + + return xencons_info_pv_init(&xenboot, 0); +} + static void xenboot_write_console(struct console *console, const char *string, unsigned len) { unsigned int linelen, off = 0; const char *pos; - if (!xen_pv_domain()) + if (!xen_pv_domain()) { + xen_hvm_early_write(0, string, len); return; + } dom0_write_console(0, string, len); @@ -628,6 +660,7 @@ static void xenboot_write_console(struct console *console, const char *string, struct console xenboot_console = { .name = "xenboot", .write = xenboot_write_console, + .setup = xenboot_setup_console, .flags = CON_PRINTBUFFER | CON_BOOT | CON_ANYTIME, .index = -1, }; @@ -640,17 +673,10 @@ void xen_raw_console_write(const char *str) if (xen_domain()) { rc = dom0_write_console(0, str, len); -#ifdef CONFIG_X86 - if (rc == -ENOSYS && xen_hvm_domain()) - goto outb_print; - - } else if (xen_cpuid_base()) { - int i; -outb_print: - for (i = 0; i < len; i++) - outb(str[i], 0xe9); -#endif + if (rc != -ENOSYS || !xen_hvm_domain()) + return; } + xen_hvm_early_write(0, str, len); } void xen_raw_printk(const char *fmt, ...) @@ -664,3 +690,18 @@ void xen_raw_printk(const char *fmt, ...) xen_raw_console_write(buf); } + +static void xenboot_earlycon_write(struct console *console, + const char *string, + unsigned len) +{ + dom0_write_console(0, string, len); +} + +static int __init xenboot_earlycon_setup(struct earlycon_device *device, + const char *opt) +{ + device->con->write = xenboot_earlycon_write; + return 0; +} +EARLYCON_DECLARE(xenboot, xenboot_earlycon_setup); diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c index 7c8a2cf16f58..9781e0dd59d6 100644 --- a/drivers/xen/balloon.c +++ b/drivers/xen/balloon.c @@ -42,7 +42,6 @@ #include <linux/kernel.h> #include <linux/sched.h> #include <linux/errno.h> -#include <linux/module.h> #include <linux/mm.h> #include <linux/bootmem.h> #include <linux/pagemap.h> @@ -760,7 +759,4 @@ static int __init balloon_init(void) return 0; } - subsys_initcall(balloon_init); - -MODULE_LICENSE("GPL"); diff --git a/drivers/xen/events/events_2l.c b/drivers/xen/events/events_2l.c index 403fe3955393..bdff01095f54 100644 --- a/drivers/xen/events/events_2l.c +++ b/drivers/xen/events/events_2l.c @@ -9,7 +9,6 @@ #include <linux/linkage.h> #include <linux/interrupt.h> #include <linux/irq.h> -#include <linux/module.h> #include <asm/sync_bitops.h> #include <asm/xen/hypercall.h> diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c index 524c22146429..488017a0806a 100644 --- a/drivers/xen/events/events_base.c +++ b/drivers/xen/events/events_base.c @@ -26,7 +26,7 @@ #include <linux/linkage.h> #include <linux/interrupt.h> #include <linux/irq.h> -#include <linux/module.h> +#include <linux/moduleparam.h> #include <linux/string.h> #include <linux/bootmem.h> #include <linux/slab.h> diff --git a/drivers/xen/events/events_fifo.c b/drivers/xen/events/events_fifo.c index eff2b88003d9..9289a17712e2 100644 --- a/drivers/xen/events/events_fifo.c +++ b/drivers/xen/events/events_fifo.c @@ -36,7 +36,6 @@ #include <linux/linkage.h> #include <linux/interrupt.h> #include <linux/irq.h> -#include <linux/module.h> #include <linux/smp.h> #include <linux/percpu.h> #include <linux/cpu.h> diff --git a/drivers/xen/features.c b/drivers/xen/features.c index 99eda169c779..d7d34fdfc993 100644 --- a/drivers/xen/features.c +++ b/drivers/xen/features.c @@ -7,7 +7,7 @@ */ #include <linux/types.h> #include <linux/cache.h> -#include <linux/module.h> +#include <linux/export.h> #include <asm/xen/hypercall.h> diff --git a/drivers/xen/grant-table.c b/drivers/xen/grant-table.c index effbaf91791f..bb36b1e1dbcc 100644 --- a/drivers/xen/grant-table.c +++ b/drivers/xen/grant-table.c @@ -33,7 +33,6 @@ #define pr_fmt(fmt) "xen:" KBUILD_MODNAME ": " fmt -#include <linux/module.h> #include <linux/sched.h> #include <linux/mm.h> #include <linux/slab.h> diff --git a/drivers/xen/platform-pci.c b/drivers/xen/platform-pci.c index 3454973dc3bb..cf9666680c8c 100644 --- a/drivers/xen/platform-pci.c +++ b/drivers/xen/platform-pci.c @@ -2,6 +2,9 @@ * platform-pci.c * * Xen platform PCI device driver + * + * Authors: ssmith@xensource.com and stefano.stabellini@eu.citrix.com + * * Copyright (c) 2005, Intel Corporation. * Copyright (c) 2007, XenSource Inc. * Copyright (c) 2010, Citrix @@ -24,7 +27,7 @@ #include <linux/interrupt.h> #include <linux/io.h> -#include <linux/module.h> +#include <linux/init.h> #include <linux/pci.h> #include <xen/platform_pci.h> @@ -36,10 +39,6 @@ #define DRV_NAME "xen-platform-pci" -MODULE_AUTHOR("ssmith@xensource.com and stefano.stabellini@eu.citrix.com"); -MODULE_DESCRIPTION("Xen platform PCI device"); -MODULE_LICENSE("GPL"); - static unsigned long platform_mmio; static unsigned long platform_mmio_alloc; static unsigned long platform_mmiolen; @@ -101,8 +100,8 @@ static int platform_pci_resume(struct pci_dev *pdev) return 0; } -static int platform_pci_init(struct pci_dev *pdev, - const struct pci_device_id *ent) +static int platform_pci_probe(struct pci_dev *pdev, + const struct pci_device_id *ent) { int i, ret; long ioaddr; @@ -181,20 +180,17 @@ static struct pci_device_id platform_pci_tbl[] = { {0,} }; -MODULE_DEVICE_TABLE(pci, platform_pci_tbl); - static struct pci_driver platform_driver = { .name = DRV_NAME, - .probe = platform_pci_init, + .probe = platform_pci_probe, .id_table = platform_pci_tbl, #ifdef CONFIG_PM .resume_early = platform_pci_resume, #endif }; -static int __init platform_pci_module_init(void) +static int __init platform_pci_init(void) { return pci_register_driver(&platform_driver); } - -module_init(platform_pci_module_init); +device_initcall(platform_pci_init); diff --git a/drivers/xen/sys-hypervisor.c b/drivers/xen/sys-hypervisor.c index b5a7342e0ba5..6881b3ceb675 100644 --- a/drivers/xen/sys-hypervisor.c +++ b/drivers/xen/sys-hypervisor.c @@ -9,7 +9,7 @@ #include <linux/slab.h> #include <linux/kernel.h> -#include <linux/module.h> +#include <linux/init.h> #include <linux/kobject.h> #include <linux/err.h> @@ -50,11 +50,6 @@ static int __init xen_sysfs_type_init(void) return sysfs_create_file(hypervisor_kobj, &type_attr.attr); } -static void xen_sysfs_type_destroy(void) -{ - sysfs_remove_file(hypervisor_kobj, &type_attr.attr); -} - /* xen version attributes */ static ssize_t major_show(struct hyp_sysfs_attr *attr, char *buffer) { @@ -111,11 +106,6 @@ static int __init xen_sysfs_version_init(void) return sysfs_create_group(hypervisor_kobj, &version_group); } -static void xen_sysfs_version_destroy(void) -{ - sysfs_remove_group(hypervisor_kobj, &version_group); -} - /* UUID */ static ssize_t uuid_show_fallback(struct hyp_sysfs_attr *attr, char *buffer) @@ -157,11 +147,6 @@ static int __init xen_sysfs_uuid_init(void) return sysfs_create_file(hypervisor_kobj, &uuid_attr.attr); } -static void xen_sysfs_uuid_destroy(void) -{ - sysfs_remove_file(hypervisor_kobj, &uuid_attr.attr); -} - /* xen compilation attributes */ static ssize_t compiler_show(struct hyp_sysfs_attr *attr, char *buffer) @@ -235,11 +220,6 @@ static int __init xen_compilation_init(void) return sysfs_create_group(hypervisor_kobj, &xen_compilation_group); } -static void xen_compilation_destroy(void) -{ - sysfs_remove_group(hypervisor_kobj, &xen_compilation_group); -} - /* xen properties info */ static ssize_t capabilities_show(struct hyp_sysfs_attr *attr, char *buffer) @@ -366,11 +346,6 @@ static int __init xen_properties_init(void) return sysfs_create_group(hypervisor_kobj, &xen_properties_group); } -static void xen_properties_destroy(void) -{ - sysfs_remove_group(hypervisor_kobj, &xen_properties_group); -} - #ifdef CONFIG_XEN_HAVE_VPMU struct pmu_mode { const char *name; @@ -484,11 +459,6 @@ static int __init xen_pmu_init(void) { return sysfs_create_group(hypervisor_kobj, &xen_pmu_group); } - -static void xen_pmu_destroy(void) -{ - sysfs_remove_group(hypervisor_kobj, &xen_pmu_group); -} #endif static int __init hyper_sysfs_init(void) @@ -517,7 +487,8 @@ static int __init hyper_sysfs_init(void) if (xen_initial_domain()) { ret = xen_pmu_init(); if (ret) { - xen_properties_destroy(); + sysfs_remove_group(hypervisor_kobj, + &xen_properties_group); goto prop_out; } } @@ -525,31 +496,17 @@ static int __init hyper_sysfs_init(void) goto out; prop_out: - xen_sysfs_uuid_destroy(); + sysfs_remove_file(hypervisor_kobj, &uuid_attr.attr); uuid_out: - xen_compilation_destroy(); + sysfs_remove_group(hypervisor_kobj, &xen_compilation_group); comp_out: - xen_sysfs_version_destroy(); + sysfs_remove_group(hypervisor_kobj, &version_group); version_out: - xen_sysfs_type_destroy(); + sysfs_remove_file(hypervisor_kobj, &type_attr.attr); out: return ret; } - -static void __exit hyper_sysfs_exit(void) -{ -#ifdef CONFIG_XEN_HAVE_VPMU - xen_pmu_destroy(); -#endif - xen_properties_destroy(); - xen_compilation_destroy(); - xen_sysfs_uuid_destroy(); - xen_sysfs_version_destroy(); - xen_sysfs_type_destroy(); - -} -module_init(hyper_sysfs_init); -module_exit(hyper_sysfs_exit); +device_initcall(hyper_sysfs_init); static ssize_t hyp_sysfs_show(struct kobject *kobj, struct attribute *attr, diff --git a/drivers/xen/xen-balloon.c b/drivers/xen/xen-balloon.c index 39e7ef8d3957..79865b8901ba 100644 --- a/drivers/xen/xen-balloon.c +++ b/drivers/xen/xen-balloon.c @@ -33,7 +33,9 @@ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt #include <linux/kernel.h> -#include <linux/module.h> +#include <linux/errno.h> +#include <linux/mm_types.h> +#include <linux/init.h> #include <linux/capability.h> #include <xen/xen.h> @@ -109,14 +111,6 @@ static int __init balloon_init(void) } subsys_initcall(balloon_init); -static void balloon_exit(void) -{ - /* XXX - release balloon here */ - return; -} - -module_exit(balloon_exit); - #define BALLOON_SHOW(name, format, args...) \ static ssize_t show_##name(struct device *dev, \ struct device_attribute *attr, \ @@ -250,5 +244,3 @@ static int register_balloon(struct device *dev) return 0; } - -MODULE_LICENSE("GPL"); diff --git a/drivers/xen/xen-pciback/conf_space.c b/drivers/xen/xen-pciback/conf_space.c index 9c234209d8b5..8e67336f8ddd 100644 --- a/drivers/xen/xen-pciback/conf_space.c +++ b/drivers/xen/xen-pciback/conf_space.c @@ -10,7 +10,7 @@ */ #include <linux/kernel.h> -#include <linux/module.h> +#include <linux/moduleparam.h> #include <linux/pci.h> #include "pciback.h" #include "conf_space.h" diff --git a/drivers/xen/xen-pciback/pciback_ops.c b/drivers/xen/xen-pciback/pciback_ops.c index fb0221434f81..2f19dd7553e6 100644 --- a/drivers/xen/xen-pciback/pciback_ops.c +++ b/drivers/xen/xen-pciback/pciback_ops.c @@ -6,7 +6,7 @@ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt -#include <linux/module.h> +#include <linux/moduleparam.h> #include <linux/wait.h> #include <linux/bitops.h> #include <xen/events.h> diff --git a/drivers/xen/xen-pciback/xenbus.c b/drivers/xen/xen-pciback/xenbus.c index 4843741e703a..c252eb3f0176 100644 --- a/drivers/xen/xen-pciback/xenbus.c +++ b/drivers/xen/xen-pciback/xenbus.c @@ -6,7 +6,7 @@ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt -#include <linux/module.h> +#include <linux/moduleparam.h> #include <linux/init.h> #include <linux/list.h> #include <linux/vmalloc.h> diff --git a/drivers/xen/xen-selfballoon.c b/drivers/xen/xen-selfballoon.c index 3b2bffde534f..53a085fca00c 100644 --- a/drivers/xen/xen-selfballoon.c +++ b/drivers/xen/xen-selfballoon.c @@ -71,7 +71,6 @@ #include <linux/swap.h> #include <linux/mm.h> #include <linux/mman.h> -#include <linux/module.h> #include <linux/workqueue.h> #include <linux/device.h> #include <xen/balloon.h> diff --git a/drivers/xen/xenbus/xenbus_dev_backend.c b/drivers/xen/xenbus/xenbus_dev_backend.c index ee6d9efd7b76..4a41ac9af966 100644 --- a/drivers/xen/xenbus/xenbus_dev_backend.c +++ b/drivers/xen/xenbus/xenbus_dev_backend.c @@ -5,7 +5,7 @@ #include <linux/mm.h> #include <linux/fs.h> #include <linux/miscdevice.h> -#include <linux/module.h> +#include <linux/init.h> #include <linux/capability.h> #include <xen/xen.h> @@ -18,8 +18,6 @@ #include "xenbus_comms.h" -MODULE_LICENSE("GPL"); - static int xenbus_backend_open(struct inode *inode, struct file *filp) { if (!capable(CAP_SYS_ADMIN)) @@ -132,11 +130,4 @@ static int __init xenbus_backend_init(void) pr_err("Could not register xenbus backend device\n"); return err; } - -static void __exit xenbus_backend_exit(void) -{ - misc_deregister(&xenbus_backend_dev); -} - -module_init(xenbus_backend_init); -module_exit(xenbus_backend_exit); +device_initcall(xenbus_backend_init); diff --git a/drivers/xen/xenbus/xenbus_dev_frontend.c b/drivers/xen/xenbus/xenbus_dev_frontend.c index 912b64edb42b..cacf30d14747 100644 --- a/drivers/xen/xenbus/xenbus_dev_frontend.c +++ b/drivers/xen/xenbus/xenbus_dev_frontend.c @@ -55,7 +55,7 @@ #include <linux/string.h> #include <linux/slab.h> #include <linux/miscdevice.h> -#include <linux/module.h> +#include <linux/init.h> #include "xenbus_comms.h" @@ -63,8 +63,6 @@ #include <xen/xen.h> #include <asm/xen/hypervisor.h> -MODULE_LICENSE("GPL"); - /* * An element of a list of outstanding transactions, for which we're * still waiting a reply. @@ -626,11 +624,4 @@ static int __init xenbus_init(void) pr_err("Could not register xenbus frontend device\n"); return err; } - -static void __exit xenbus_exit(void) -{ - misc_deregister(&xenbus_dev); -} - -module_init(xenbus_init); -module_exit(xenbus_exit); +device_initcall(xenbus_init); diff --git a/drivers/xen/xenbus/xenbus_xs.c b/drivers/xen/xenbus/xenbus_xs.c index ba804f3d8278..374b12af8812 100644 --- a/drivers/xen/xenbus/xenbus_xs.c +++ b/drivers/xen/xenbus/xenbus_xs.c @@ -44,7 +44,6 @@ #include <linux/fcntl.h> #include <linux/kthread.h> #include <linux/rwsem.h> -#include <linux/module.h> #include <linux/mutex.h> #include <asm/xen/hypervisor.h> #include <xen/xenbus.h> diff --git a/drivers/xen/xenfs/xensyms.c b/drivers/xen/xenfs/xensyms.c index a03f261b12d8..c6e2b4a542ea 100644 --- a/drivers/xen/xenfs/xensyms.c +++ b/drivers/xen/xenfs/xensyms.c @@ -1,4 +1,3 @@ -#include <linux/module.h> #include <linux/init.h> #include <linux/seq_file.h> #include <linux/fs.h> |