@@ -6,4 +6,4 @@
# it under the terms of the GNU General Public License (version 2 only)
# as published by the Free Software Foundation.
-obj-$(CONFIG_S390_GUEST) += kvm_virtio.o virtio_ccw.o
+obj-$(CONFIG_S390_GUEST) += kvm_virtio.o early_printk.o virtio_ccw.o
new file mode 100644
@@ -0,0 +1,42 @@
+/*
+ * early_printk.c - code for early console output with virtio_console
+ * split off from kvm_virtio.c
+ *
+ * Copyright IBM Corp. 2008
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License (version 2 only)
+ * as published by the Free Software Foundation.
+ *
+ * Author(s): Christian Borntraeger <borntraeger@de.ibm.com>
+ */
+
+#include <linux/kernel_stat.h>
+#include <linux/init.h>
+#include <linux/err.h>
+#include <linux/virtio_console.h>
+#include <asm/kvm_para.h>
+#include <asm/kvm_virtio.h>
+#include <asm/setup.h>
+#include <asm/sclp.h>
+
+static __init int early_put_chars(u32 vtermno, const char *buf, int count)
+{
+ char scratch[17];
+ unsigned int len = count;
+
+ if (len > sizeof(scratch) - 1)
+ len = sizeof(scratch) - 1;
+ scratch[len] = '\0';
+ memcpy(scratch, buf, len);
+ kvm_hypercall1(KVM_S390_VIRTIO_NOTIFY, __pa(scratch));
+ return len;
+}
+
+static int __init s390_virtio_console_init(void)
+{
+ if (sclp_has_vt220() || sclp_has_linemode())
+ return -ENODEV;
+ return virtio_cons_early_init(early_put_chars);
+}
+console_initcall(s390_virtio_console_init);
@@ -17,7 +17,6 @@
#include <linux/virtio.h>
#include <linux/virtio_config.h>
#include <linux/slab.h>
-#include <linux/virtio_console.h>
#include <linux/interrupt.h>
#include <linux/virtio_ring.h>
#include <linux/export.h>
@@ -25,9 +24,9 @@
#include <asm/io.h>
#include <asm/kvm_para.h>
#include <asm/kvm_virtio.h>
-#include <asm/sclp.h>
#include <asm/setup.h>
#include <asm/irq.h>
+#include <asm/sclp.h>
#define VIRTIO_SUBCODE_64 0x0D00
@@ -461,8 +460,7 @@ static int __init kvm_devices_init(void)
if (test_devices_support() < 0) {
vmem_remove_mapping(real_memory_size, PAGE_SIZE);
root_device_unregister(kvm_root);
- /* No error. */
- return 0;
+ return -ENODEV;
}
INIT_WORK(&hotplug_work, hotplug_devices);
@@ -474,29 +472,6 @@ static int __init kvm_devices_init(void)
return 0;
}
-/* code for early console output with virtio_console */
-static __init int early_put_chars(u32 vtermno, const char *buf, int count)
-{
- char scratch[17];
- unsigned int len = count;
-
- if (len > sizeof(scratch) - 1)
- len = sizeof(scratch) - 1;
- scratch[len] = '\0';
- memcpy(scratch, buf, len);
- kvm_hypercall1(KVM_S390_VIRTIO_NOTIFY, __pa(scratch));
- return len;
-}
-
-static int __init s390_virtio_console_init(void)
-{
- if (sclp_has_vt220() || sclp_has_linemode())
- return -ENODEV;
- return virtio_cons_early_init(early_put_chars);
-}
-console_initcall(s390_virtio_console_init);
-
-
/*
* We do this after core stuff, but before the drivers.
*/
@@ -17,7 +17,6 @@
#include <linux/virtio.h>
#include <linux/virtio_config.h>
#include <linux/slab.h>
-#include <linux/virtio_console.h>
#include <linux/interrupt.h>
#include <linux/virtio_ring.h>
#include <linux/pfn.h>
This code is transport agnostic and can be used by both the legacy virtio code and virtio_ccw. Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com> --- drivers/s390/kvm/Makefile | 2 +- drivers/s390/kvm/early_printk.c | 42 +++++++++++++++++++++++++++++++++++++++++ drivers/s390/kvm/kvm_virtio.c | 29 ++-------------------------- drivers/s390/kvm/virtio_ccw.c | 1 - 4 files changed, 45 insertions(+), 29 deletions(-) create mode 100644 drivers/s390/kvm/early_printk.c