|
@@ -228,6 +228,41 @@ static int __init print_banner(void)
|
|
|
}
|
|
|
core_initcall(print_banner);
|
|
|
|
|
|
+static struct resource reserve_ioports = {
|
|
|
+ .start = 0,
|
|
|
+ .end = IO_SPACE_LIMIT,
|
|
|
+ .name = "paravirt-ioport",
|
|
|
+ .flags = IORESOURCE_IO | IORESOURCE_BUSY,
|
|
|
+};
|
|
|
+
|
|
|
+static struct resource reserve_iomem = {
|
|
|
+ .start = 0,
|
|
|
+ .end = -1,
|
|
|
+ .name = "paravirt-iomem",
|
|
|
+ .flags = IORESOURCE_MEM | IORESOURCE_BUSY,
|
|
|
+};
|
|
|
+
|
|
|
+/*
|
|
|
+ * Reserve the whole legacy IO space to prevent any legacy drivers
|
|
|
+ * from wasting time probing for their hardware. This is a fairly
|
|
|
+ * brute-force approach to disabling all non-virtual drivers.
|
|
|
+ *
|
|
|
+ * Note that this must be called very early to have any effect.
|
|
|
+ */
|
|
|
+int paravirt_disable_iospace(void)
|
|
|
+{
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ ret = request_resource(&ioport_resource, &reserve_ioports);
|
|
|
+ if (ret == 0) {
|
|
|
+ ret = request_resource(&iomem_resource, &reserve_iomem);
|
|
|
+ if (ret)
|
|
|
+ release_resource(&reserve_ioports);
|
|
|
+ }
|
|
|
+
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
struct paravirt_ops paravirt_ops = {
|
|
|
.name = "bare hardware",
|
|
|
.paravirt_enabled = 0,
|