0d71e75f73
26369-libxl-devid.patch - fate##313584: pass bios information to XEN HVM guest 26554-hvm-firmware-passthrough.patch 26555-hvm-firmware-passthrough.patch 26556-hvm-firmware-passthrough.patch - Upstream patches from Jan 26516-ACPI-parse-table-retval.patch (Replaces CVE-2013-0153-xsa36.patch) 26517-AMD-IOMMU-clear-irtes.patch (Replaces CVE-2013-0153-xsa36.patch) 26518-AMD-IOMMU-disable-if-SATA-combined-mode.patch (Replaces CVE-2013-0153-xsa36.patch) 26519-AMD-IOMMU-perdev-intremap-default.patch (Replaces CVE-2013-0153-xsa36.patch) 26526-pvdrv-no-devinit.patch 26529-gcc48-build-fix.patch 26531-AMD-IOMMU-IVHD-special-missing.patch (Replaces CVE-2013-0153-xsa36.patch) 26532-AMD-IOMMU-phantom-MSI.patch 26536-xenoprof-div-by-0.patch 26576-x86-APICV-migration.patch 26577-x86-APICV-x2APIC.patch 26578-AMD-IOMMU-replace-BUG_ON.patch - bnc#797014 - no way to control live migrations 26547-tools-xc_fix_logic_error_in_stdiostream_progress.patch 26548-tools-xc_handle_tty_output_differently_in_stdiostream_progress.patch 26549-tools-xc_turn_XCFLAGS_*_into_shifts.patch 26550-tools-xc_restore_logging_in_xc_save.patch 26551-tools-xc_log_pid_in_xc_save-xc_restore_output.patch - PVonHVM: __devinit was removed in linux-3.8 OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=229
95 lines
3.5 KiB
Diff
95 lines
3.5 KiB
Diff
# HG changeset patch
|
|
# User Paolo Bonzini <pbonzini@redhat.com>
|
|
# Date 1358505311 -3600
|
|
# Node ID 3b59a6c3e9b0fb5009bdfff97c8493bb9f0bec54
|
|
# Parent 025f202f3022c30d1ec3b6ffcb72861c43a32cf7
|
|
x86: find a better location for the real-mode trampoline
|
|
|
|
On some machines, the location at 0x40e does not point to the beginning
|
|
of the EBDA. Rather, it points to the beginning of the BIOS-reserved
|
|
area of the EBDA, while the option ROMs place their data below that
|
|
segment.
|
|
|
|
For this reason, 0x413 is actually a better source than 0x40e to get
|
|
the location of the real-mode trampoline. Xen was already using it
|
|
as a second source, and this patch keeps that working. However, just
|
|
in case, let's also fetch the information from the multiboot structure,
|
|
where the boot loader should have placed it. This way we don't
|
|
necessarily trust one of the BIOS or the multiboot loader more than
|
|
the other.
|
|
|
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
|
|
Retain the previous code, thus using the multiboot value only if it's
|
|
sane but lower than the BDA computed one. Also use the full 32-bit
|
|
mem_lower value and prefer MBI_MEMLIMITS over open coding it (requiring
|
|
a slight adjustment to multiboot.h to make its constants actually
|
|
usable in assembly code, which previously they were only meant to be).
|
|
|
|
Signed-off-by: Jan Beulich <jbeulich@suse.com>
|
|
Acked-by: Keir Fraser <keir@xen.org>
|
|
Committed-by: Jan Beulich <jbeulich@suse.com>
|
|
|
|
--- a/xen/arch/x86/boot/head.S
|
|
+++ b/xen/arch/x86/boot/head.S
|
|
@@ -88,6 +88,20 @@ __start:
|
|
movzwl 0x413,%eax /* use base memory size on failure */
|
|
shl $10-4,%eax
|
|
1:
|
|
+ /*
|
|
+ * Compare the value in the BDA with the information from the
|
|
+ * multiboot structure (if available) and use the smallest.
|
|
+ */
|
|
+ testb $MBI_MEMLIMITS,(%ebx)
|
|
+ jz 2f /* not available? BDA value will be fine */
|
|
+ mov 4(%ebx),%edx
|
|
+ cmp $0x100,%edx /* is the multiboot value too small? */
|
|
+ jb 2f /* if so, do not use it */
|
|
+ shl $10-4,%edx
|
|
+ cmp %eax,%edx /* compare with BDA value */
|
|
+ cmovb %edx,%eax /* and use the smaller */
|
|
+
|
|
+2: /* Reserve 64kb for the trampoline */
|
|
sub $0x1000,%eax
|
|
|
|
/* From arch/x86/smpboot.c: start_eip had better be page-aligned! */
|
|
--- a/xen/include/xen/multiboot.h
|
|
+++ b/xen/include/xen/multiboot.h
|
|
@@ -18,6 +18,7 @@
|
|
#ifndef __MULTIBOOT_H__
|
|
#define __MULTIBOOT_H__
|
|
|
|
+#include "const.h"
|
|
|
|
/*
|
|
* Multiboot header structure.
|
|
@@ -31,17 +32,17 @@
|
|
/* The magic number passed by a Multiboot-compliant boot loader. */
|
|
#define MULTIBOOT_BOOTLOADER_MAGIC 0x2BADB002
|
|
|
|
-#define MBI_MEMLIMITS (1u<< 0)
|
|
-#define MBI_BOOTDEV (1u<< 1)
|
|
-#define MBI_CMDLINE (1u<< 2)
|
|
-#define MBI_MODULES (1u<< 3)
|
|
-#define MBI_AOUT_SYMS (1u<< 4)
|
|
-#define MBI_ELF_SYMS (1u<< 5)
|
|
-#define MBI_MEMMAP (1u<< 6)
|
|
-#define MBI_DRIVES (1u<< 7)
|
|
-#define MBI_BIOSCONFIG (1u<< 8)
|
|
-#define MBI_LOADERNAME (1u<< 9)
|
|
-#define MBI_APM (1u<<10)
|
|
+#define MBI_MEMLIMITS (_AC(1,u) << 0)
|
|
+#define MBI_BOOTDEV (_AC(1,u) << 1)
|
|
+#define MBI_CMDLINE (_AC(1,u) << 2)
|
|
+#define MBI_MODULES (_AC(1,u) << 3)
|
|
+#define MBI_AOUT_SYMS (_AC(1,u) << 4)
|
|
+#define MBI_ELF_SYMS (_AC(1,u) << 5)
|
|
+#define MBI_MEMMAP (_AC(1,u) << 6)
|
|
+#define MBI_DRIVES (_AC(1,u) << 7)
|
|
+#define MBI_BIOSCONFIG (_AC(1,u) << 8)
|
|
+#define MBI_LOADERNAME (_AC(1,u) << 9)
|
|
+#define MBI_APM (_AC(1,u) << 10)
|
|
|
|
#ifndef __ASSEMBLY__
|
|
|