- Add patches from proposed upstream series to load BIOS's from
the toolstack instead of embedding in hvmloader http://lists.xenproject.org/archives/html/xen-devel/2016-03/msg01626.html 0001-libxc-Rework-extra-module-initialisation.patch, 0002-libxc-Prepare-a-start-info-structure-for-hvmloader.patch, 0003-configure-define-SEABIOS_PATH-and-OVMF_PATH.patch, 0004-firmware-makefile-install-BIOS-blob.patch, 0005-libxl-Load-guest-BIOS-from-file.patch, 0006-xen-Move-the-hvm_start_info-C-representation-from-li.patch, 0007-hvmloader-Grab-the-hvm_start_info-pointer.patch, 0008-hvmloader-Locate-the-BIOS-blob.patch, 0009-hvmloader-Check-modules-whereabouts-in-perform_tests.patch, 0010-hvmloader-Load-SeaBIOS-from-hvm_start_info-modules.patch, 0011-hvmloader-Load-OVMF-from-modules.patch, 0012-hvmloader-Specific-bios_load-function-required.patch, 0013-hvmloader-Always-build-in-SeaBIOS-and-OVMF-loader.patch, 0014-configure-do-not-depend-on-SEABIOS_PATH-or-OVMF_PATH.patch - Enable support for UEFI on x86_64 using the ovmf-x86_64-ms.bin firmware from qemu-ovmf-x86_64. The firmware is preloaded with Microsoft keys to more closely resemble firmware on real hardware FATE#320490 OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=416
This commit is contained in:
parent
429a42ebfe
commit
92ed83b0e8
185
0001-libxc-Rework-extra-module-initialisation.patch
Normal file
185
0001-libxc-Rework-extra-module-initialisation.patch
Normal file
@ -0,0 +1,185 @@
|
||||
From 270b8e85b5379fe93192f36966384ff07400fe7b Mon Sep 17 00:00:00 2001
|
||||
From: Anthony PERARD <anthony.perard@citrix.com>
|
||||
Date: Mon, 14 Mar 2016 17:55:36 +0000
|
||||
Subject: [PATCH 01/15] libxc: Rework extra module initialisation
|
||||
|
||||
This patch use xc_dom_alloc_segment() to allocate the memory space for the
|
||||
ACPI modules and the SMBIOS modules. This is to replace the arbitrary
|
||||
placement of 1MB after the hvmloader image.
|
||||
|
||||
In later patches, while trying to load a firmware such as OVMF, the later
|
||||
could easily be loaded past the address 4MB (OVMF is a 2MB binary), but
|
||||
hvmloader use a range of memory from 4MB to 8MB to perform tests and in the
|
||||
process, clear the memory, before loading the modules.
|
||||
|
||||
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
|
||||
---
|
||||
tools/libxc/xc_dom_hvmloader.c | 131 ++++++++++++-----------------------------
|
||||
1 file changed, 38 insertions(+), 93 deletions(-)
|
||||
|
||||
Index: xen-4.7.0-testing/tools/libxc/xc_dom_hvmloader.c
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/libxc/xc_dom_hvmloader.c
|
||||
+++ xen-4.7.0-testing/tools/libxc/xc_dom_hvmloader.c
|
||||
@@ -129,98 +129,52 @@ static elf_errorstatus xc_dom_parse_hvm_
|
||||
return rc;
|
||||
}
|
||||
|
||||
-static int modules_init(struct xc_dom_image *dom,
|
||||
- uint64_t vend, struct elf_binary *elf,
|
||||
- uint64_t *mstart_out, uint64_t *mend_out)
|
||||
+static int module_init_one(struct xc_dom_image *dom,
|
||||
+ struct xc_hvm_firmware_module *module,
|
||||
+ char *name)
|
||||
{
|
||||
-#define MODULE_ALIGN 1UL << 7
|
||||
-#define MB_ALIGN 1UL << 20
|
||||
-#define MKALIGN(x, a) (((uint64_t)(x) + (a) - 1) & ~(uint64_t)((a) - 1))
|
||||
- uint64_t total_len = 0, offset1 = 0;
|
||||
-
|
||||
- if ( dom->acpi_module.length == 0 && dom->smbios_module.length == 0 )
|
||||
- return 0;
|
||||
-
|
||||
- /* Find the total length for the firmware modules with a reasonable large
|
||||
- * alignment size to align each the modules.
|
||||
- */
|
||||
- total_len = MKALIGN(dom->acpi_module.length, MODULE_ALIGN);
|
||||
- offset1 = total_len;
|
||||
- total_len += MKALIGN(dom->smbios_module.length, MODULE_ALIGN);
|
||||
-
|
||||
- /* Want to place the modules 1Mb+change behind the loader image. */
|
||||
- *mstart_out = MKALIGN(elf->pend, MB_ALIGN) + (MB_ALIGN);
|
||||
- *mend_out = *mstart_out + total_len;
|
||||
-
|
||||
- if ( *mend_out > vend )
|
||||
- return -1;
|
||||
-
|
||||
- if ( dom->acpi_module.length != 0 )
|
||||
- dom->acpi_module.guest_addr_out = *mstart_out;
|
||||
- if ( dom->smbios_module.length != 0 )
|
||||
- dom->smbios_module.guest_addr_out = *mstart_out + offset1;
|
||||
+ struct xc_dom_seg seg;
|
||||
+ void *dest;
|
||||
+
|
||||
+ if ( module->length )
|
||||
+ {
|
||||
+ if ( xc_dom_alloc_segment(dom, &seg, name, 0, module->length) )
|
||||
+ goto err;
|
||||
+ dest = xc_dom_seg_to_ptr(dom, &seg);
|
||||
+ if ( dest == NULL )
|
||||
+ {
|
||||
+ DOMPRINTF("%s: xc_dom_seg_to_ptr(dom, &seg) => NULL",
|
||||
+ __FUNCTION__);
|
||||
+ goto err;
|
||||
+ }
|
||||
+ memcpy(dest, module->data, module->length);
|
||||
+ module->guest_addr_out = seg.vstart;
|
||||
+ if ( module->guest_addr_out > UINT32_MAX ||
|
||||
+ module->guest_addr_out + module->length > UINT32_MAX )
|
||||
+ {
|
||||
+ DOMPRINTF("%s: Module %s would be loaded abrove 4GB",
|
||||
+ __FUNCTION__, name);
|
||||
+ goto err;
|
||||
+ }
|
||||
+ }
|
||||
|
||||
return 0;
|
||||
+err:
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
-static int loadmodules(struct xc_dom_image *dom,
|
||||
- uint64_t mstart, uint64_t mend,
|
||||
- uint32_t domid)
|
||||
+static int modules_init(struct xc_dom_image *dom)
|
||||
{
|
||||
- privcmd_mmap_entry_t *entries = NULL;
|
||||
- unsigned long pfn_start;
|
||||
- unsigned long pfn_end;
|
||||
- size_t pages;
|
||||
- uint32_t i;
|
||||
- uint8_t *dest;
|
||||
- int rc = -1;
|
||||
- xc_interface *xch = dom->xch;
|
||||
-
|
||||
- if ( mstart == 0 || mend == 0 )
|
||||
- return 0;
|
||||
-
|
||||
- pfn_start = (unsigned long)(mstart >> PAGE_SHIFT);
|
||||
- pfn_end = (unsigned long)((mend + PAGE_SIZE - 1) >> PAGE_SHIFT);
|
||||
- pages = pfn_end - pfn_start;
|
||||
+ int rc;
|
||||
|
||||
- /* Map address space for module list. */
|
||||
- entries = calloc(pages, sizeof(privcmd_mmap_entry_t));
|
||||
- if ( entries == NULL )
|
||||
- goto error_out;
|
||||
+ rc = module_init_one(dom, &dom->acpi_module, "acpi module");
|
||||
+ if ( rc ) goto err;
|
||||
+ rc = module_init_one(dom, &dom->smbios_module, "smbios module");
|
||||
+ if ( rc ) goto err;
|
||||
|
||||
- for ( i = 0; i < pages; i++ )
|
||||
- entries[i].mfn = (mstart >> PAGE_SHIFT) + i;
|
||||
-
|
||||
- dest = xc_map_foreign_ranges(
|
||||
- xch, domid, pages << PAGE_SHIFT, PROT_READ | PROT_WRITE, 1 << PAGE_SHIFT,
|
||||
- entries, pages);
|
||||
- if ( dest == NULL )
|
||||
- goto error_out;
|
||||
-
|
||||
- /* Zero the range so padding is clear between modules */
|
||||
- memset(dest, 0, pages << PAGE_SHIFT);
|
||||
-
|
||||
- /* Load modules into range */
|
||||
- if ( dom->acpi_module.length != 0 )
|
||||
- {
|
||||
- memcpy(dest,
|
||||
- dom->acpi_module.data,
|
||||
- dom->acpi_module.length);
|
||||
- }
|
||||
- if ( dom->smbios_module.length != 0 )
|
||||
- {
|
||||
- memcpy(dest + (dom->smbios_module.guest_addr_out - mstart),
|
||||
- dom->smbios_module.data,
|
||||
- dom->smbios_module.length);
|
||||
- }
|
||||
-
|
||||
- munmap(dest, pages << PAGE_SHIFT);
|
||||
- rc = 0;
|
||||
-
|
||||
- error_out:
|
||||
- free(entries);
|
||||
-
|
||||
- return rc;
|
||||
+ return 0;
|
||||
+err:
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
static elf_errorstatus xc_dom_load_hvm_kernel(struct xc_dom_image *dom)
|
||||
@@ -229,7 +183,6 @@ static elf_errorstatus xc_dom_load_hvm_k
|
||||
privcmd_mmap_entry_t *entries = NULL;
|
||||
size_t pages = (elf->pend - elf->pstart + PAGE_SIZE - 1) >> PAGE_SHIFT;
|
||||
elf_errorstatus rc;
|
||||
- uint64_t m_start = 0, m_end = 0;
|
||||
int i;
|
||||
|
||||
/* Map address space for initial elf image. */
|
||||
@@ -262,15 +215,7 @@ static elf_errorstatus xc_dom_load_hvm_k
|
||||
|
||||
munmap(elf->dest_base, elf->dest_size);
|
||||
|
||||
- rc = modules_init(dom, dom->total_pages << PAGE_SHIFT, elf, &m_start,
|
||||
- &m_end);
|
||||
- if ( rc != 0 )
|
||||
- {
|
||||
- DOMPRINTF("%s: insufficient space to load modules.", __func__);
|
||||
- goto error;
|
||||
- }
|
||||
-
|
||||
- rc = loadmodules(dom, m_start, m_end, dom->guest_domid);
|
||||
+ rc = modules_init(dom);
|
||||
if ( rc != 0 )
|
||||
{
|
||||
DOMPRINTF("%s: unable to load modules.", __func__);
|
261
0002-libxc-Prepare-a-start-info-structure-for-hvmloader.patch
Normal file
261
0002-libxc-Prepare-a-start-info-structure-for-hvmloader.patch
Normal file
@ -0,0 +1,261 @@
|
||||
From 34cd9218de8579722240d1acdcaae4e4278f667e Mon Sep 17 00:00:00 2001
|
||||
From: Anthony PERARD <anthony.perard@citrix.com>
|
||||
Date: Mon, 14 Mar 2016 17:55:37 +0000
|
||||
Subject: [PATCH 02/15] libxc: Prepare a start info structure for hvmloader
|
||||
|
||||
... and load BIOS into guest memory.
|
||||
|
||||
This adds a new firmware module, bios_module. It is
|
||||
loaded in the guest memory and final location is provided to hvmloader
|
||||
via the hvm_start_info struct.
|
||||
|
||||
This patch create the hvm_start_info struct for HVM guest that have a
|
||||
device model, so this is now common code with HVM guest without device
|
||||
model.
|
||||
|
||||
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
|
||||
---
|
||||
tools/libxc/include/xc_dom.h | 3 +
|
||||
tools/libxc/xc_dom_hvmloader.c | 2 +
|
||||
tools/libxc/xc_dom_x86.c | 132 ++++++++++++++++++++++++++++-------------
|
||||
xen/include/public/xen.h | 2 +-
|
||||
4 files changed, 96 insertions(+), 43 deletions(-)
|
||||
|
||||
Index: xen-4.7.0-testing/tools/libxc/include/xc_dom.h
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/libxc/include/xc_dom.h
|
||||
+++ xen-4.7.0-testing/tools/libxc/include/xc_dom.h
|
||||
@@ -209,6 +209,9 @@ struct xc_dom_image {
|
||||
/* If unset disables the setup of the IOREQ pages. */
|
||||
bool device_model;
|
||||
|
||||
+ /* BIOS passed to HVMLOADER */
|
||||
+ struct xc_hvm_firmware_module bios_module;
|
||||
+
|
||||
/* Extra ACPI tables passed to HVMLOADER */
|
||||
struct xc_hvm_firmware_module acpi_module;
|
||||
|
||||
Index: xen-4.7.0-testing/tools/libxc/xc_dom_hvmloader.c
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/libxc/xc_dom_hvmloader.c
|
||||
+++ xen-4.7.0-testing/tools/libxc/xc_dom_hvmloader.c
|
||||
@@ -167,6 +167,8 @@ static int modules_init(struct xc_dom_im
|
||||
{
|
||||
int rc;
|
||||
|
||||
+ rc = module_init_one(dom, &dom->bios_module, "bios module");
|
||||
+ if ( rc ) goto err;
|
||||
rc = module_init_one(dom, &dom->acpi_module, "acpi module");
|
||||
if ( rc ) goto err;
|
||||
rc = module_init_one(dom, &dom->smbios_module, "smbios module");
|
||||
Index: xen-4.7.0-testing/tools/libxc/xc_dom_x86.c
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/libxc/xc_dom_x86.c
|
||||
+++ xen-4.7.0-testing/tools/libxc/xc_dom_x86.c
|
||||
@@ -69,6 +69,9 @@
|
||||
#define round_up(addr, mask) ((addr) | (mask))
|
||||
#define round_pg_up(addr) (((addr) + PAGE_SIZE_X86 - 1) & ~(PAGE_SIZE_X86 - 1))
|
||||
|
||||
+#define HVMLOADER_MODULE_MAX_COUNT 1
|
||||
+#define HVMLOADER_MODULE_NAME_SIZE 10
|
||||
+
|
||||
struct xc_dom_params {
|
||||
unsigned levels;
|
||||
xen_vaddr_t vaddr_mask;
|
||||
@@ -590,6 +593,7 @@ static int alloc_magic_pages_hvm(struct
|
||||
xen_pfn_t special_array[X86_HVM_NR_SPECIAL_PAGES];
|
||||
xen_pfn_t ioreq_server_array[NR_IOREQ_SERVER_PAGES];
|
||||
xc_interface *xch = dom->xch;
|
||||
+ size_t start_info_size = sizeof(struct hvm_start_info);
|
||||
|
||||
/* Allocate and clear special pages. */
|
||||
for ( i = 0; i < X86_HVM_NR_SPECIAL_PAGES; i++ )
|
||||
@@ -624,8 +628,6 @@ static int alloc_magic_pages_hvm(struct
|
||||
|
||||
if ( !dom->device_model )
|
||||
{
|
||||
- size_t start_info_size = sizeof(struct hvm_start_info);
|
||||
-
|
||||
if ( dom->cmdline )
|
||||
{
|
||||
dom->cmdline_size = ROUNDUP(strlen(dom->cmdline) + 1, 8);
|
||||
@@ -635,17 +637,26 @@ static int alloc_magic_pages_hvm(struct
|
||||
/* Limited to one module. */
|
||||
if ( dom->ramdisk_blob )
|
||||
start_info_size += sizeof(struct hvm_modlist_entry);
|
||||
-
|
||||
- rc = xc_dom_alloc_segment(dom, &dom->start_info_seg,
|
||||
- "HVMlite start info", 0, start_info_size);
|
||||
- if ( rc != 0 )
|
||||
- {
|
||||
- DOMPRINTF("Unable to reserve memory for the start info");
|
||||
- goto out;
|
||||
- }
|
||||
}
|
||||
else
|
||||
{
|
||||
+ start_info_size +=
|
||||
+ sizeof(struct hvm_modlist_entry) * HVMLOADER_MODULE_MAX_COUNT;
|
||||
+ /* Add extra space to write modules name */
|
||||
+ start_info_size +=
|
||||
+ HVMLOADER_MODULE_NAME_SIZE * HVMLOADER_MODULE_MAX_COUNT;
|
||||
+ }
|
||||
+
|
||||
+ rc = xc_dom_alloc_segment(dom, &dom->start_info_seg,
|
||||
+ "HVMlite start info", 0, start_info_size);
|
||||
+ if ( rc != 0 )
|
||||
+ {
|
||||
+ DOMPRINTF("Unable to reserve memory for the start info");
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ if ( dom->device_model )
|
||||
+ {
|
||||
/*
|
||||
* Allocate and clear additional ioreq server pages. The default
|
||||
* server will use the IOREQ and BUFIOREQ special pages above.
|
||||
@@ -1689,39 +1700,68 @@ static int alloc_pgtables_hvm(struct xc_
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static void add_module_to_list(struct xc_dom_image *dom,
|
||||
+ struct xc_hvm_firmware_module *module,
|
||||
+ const char *name,
|
||||
+ struct hvm_modlist_entry *modlist,
|
||||
+ struct hvm_start_info *start_info)
|
||||
+{
|
||||
+ uint32_t index = start_info->nr_modules;
|
||||
+ if ( module->length == 0 )
|
||||
+ return;
|
||||
+
|
||||
+ assert(start_info->nr_modules < HVMLOADER_MODULE_MAX_COUNT);
|
||||
+ assert(strnlen(name, HVMLOADER_MODULE_NAME_SIZE)
|
||||
+ < HVMLOADER_MODULE_NAME_SIZE);
|
||||
+
|
||||
+ modlist[index].paddr = module->guest_addr_out;
|
||||
+ modlist[index].size = module->length;
|
||||
+ strncpy((char*)(modlist + HVMLOADER_MODULE_MAX_COUNT)
|
||||
+ + HVMLOADER_MODULE_NAME_SIZE * index,
|
||||
+ name, HVMLOADER_MODULE_NAME_SIZE);
|
||||
+ modlist[index].cmdline_paddr =
|
||||
+ (dom->start_info_seg.pfn << PAGE_SHIFT) +
|
||||
+ ((uintptr_t)modlist - (uintptr_t)start_info) +
|
||||
+ sizeof(struct hvm_modlist_entry) * HVMLOADER_MODULE_MAX_COUNT +
|
||||
+ HVMLOADER_MODULE_NAME_SIZE * index;
|
||||
+
|
||||
+ start_info->nr_modules++;
|
||||
+}
|
||||
+
|
||||
static int bootlate_hvm(struct xc_dom_image *dom)
|
||||
{
|
||||
uint32_t domid = dom->guest_domid;
|
||||
xc_interface *xch = dom->xch;
|
||||
+ struct hvm_start_info *start_info;
|
||||
+ size_t start_info_size;
|
||||
+ void *start_page;
|
||||
+ struct hvm_modlist_entry *modlist;
|
||||
|
||||
- if ( !dom->device_model )
|
||||
- {
|
||||
- struct hvm_start_info *start_info;
|
||||
- size_t start_info_size;
|
||||
- void *start_page;
|
||||
-
|
||||
- start_info_size = sizeof(*start_info) + dom->cmdline_size;
|
||||
- if ( dom->ramdisk_blob )
|
||||
- start_info_size += sizeof(struct hvm_modlist_entry);
|
||||
+ start_info_size = sizeof(*start_info) + dom->cmdline_size;
|
||||
+ if ( dom->ramdisk_blob )
|
||||
+ start_info_size += sizeof(struct hvm_modlist_entry);
|
||||
|
||||
- if ( start_info_size >
|
||||
- dom->start_info_seg.pages << XC_DOM_PAGE_SHIFT(dom) )
|
||||
- {
|
||||
- DOMPRINTF("Trying to map beyond start_info_seg");
|
||||
- return -1;
|
||||
- }
|
||||
+ if ( start_info_size >
|
||||
+ dom->start_info_seg.pages << XC_DOM_PAGE_SHIFT(dom) )
|
||||
+ {
|
||||
+ DOMPRINTF("Trying to map beyond start_info_seg");
|
||||
+ return -1;
|
||||
+ }
|
||||
|
||||
- start_page = xc_map_foreign_range(xch, domid, start_info_size,
|
||||
- PROT_READ | PROT_WRITE,
|
||||
- dom->start_info_seg.pfn);
|
||||
- if ( start_page == NULL )
|
||||
- {
|
||||
- DOMPRINTF("Unable to map HVM start info page");
|
||||
- return -1;
|
||||
- }
|
||||
+ start_page = xc_map_foreign_range(xch, domid, start_info_size,
|
||||
+ PROT_READ | PROT_WRITE,
|
||||
+ dom->start_info_seg.pfn);
|
||||
+ if ( start_page == NULL )
|
||||
+ {
|
||||
+ DOMPRINTF("Unable to map HVM start info page");
|
||||
+ return -1;
|
||||
+ }
|
||||
|
||||
- start_info = start_page;
|
||||
+ start_info = start_page;
|
||||
+ modlist = start_page + sizeof(*start_info) + dom->cmdline_size;
|
||||
|
||||
+ if ( !dom->device_model )
|
||||
+ {
|
||||
if ( dom->cmdline )
|
||||
{
|
||||
char *cmdline = start_page + sizeof(*start_info);
|
||||
@@ -1733,22 +1773,30 @@ static int bootlate_hvm(struct xc_dom_im
|
||||
|
||||
if ( dom->ramdisk_blob )
|
||||
{
|
||||
- struct hvm_modlist_entry *modlist =
|
||||
- start_page + sizeof(*start_info) + dom->cmdline_size;
|
||||
|
||||
modlist[0].paddr = dom->ramdisk_seg.vstart - dom->parms.virt_base;
|
||||
modlist[0].size = dom->ramdisk_seg.vend - dom->ramdisk_seg.vstart;
|
||||
- start_info->modlist_paddr = (dom->start_info_seg.pfn << PAGE_SHIFT) +
|
||||
- ((uintptr_t)modlist - (uintptr_t)start_info);
|
||||
start_info->nr_modules = 1;
|
||||
}
|
||||
-
|
||||
- start_info->magic = XEN_HVM_START_MAGIC_VALUE;
|
||||
-
|
||||
- munmap(start_page, start_info_size);
|
||||
}
|
||||
else
|
||||
{
|
||||
+ add_module_to_list(dom, &dom->bios_module, "bios",
|
||||
+ modlist, start_info);
|
||||
+ }
|
||||
+
|
||||
+ if ( start_info->nr_modules )
|
||||
+ {
|
||||
+ start_info->modlist_paddr = (dom->start_info_seg.pfn << PAGE_SHIFT) +
|
||||
+ ((uintptr_t)modlist - (uintptr_t)start_info);
|
||||
+ }
|
||||
+
|
||||
+ start_info->magic = XEN_HVM_START_MAGIC_VALUE;
|
||||
+
|
||||
+ munmap(start_page, start_info_size);
|
||||
+
|
||||
+ if ( dom->device_model )
|
||||
+ {
|
||||
void *hvm_info_page;
|
||||
|
||||
if ( (hvm_info_page = xc_map_foreign_range(
|
||||
Index: xen-4.7.0-testing/xen/include/public/xen.h
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/xen/include/public/xen.h
|
||||
+++ xen-4.7.0-testing/xen/include/public/xen.h
|
||||
@@ -815,7 +815,7 @@ struct start_info {
|
||||
typedef struct start_info start_info_t;
|
||||
|
||||
/*
|
||||
- * Start of day structure passed to PVH guests in %ebx.
|
||||
+ * Start of day structure passed to PVH guests and to HVM guests in %ebx.
|
||||
*
|
||||
* NOTE: nothing will be loaded at physical address 0, so a 0 value in any
|
||||
* of the address fields should be treated as not present.
|
38
0003-configure-define-SEABIOS_PATH-and-OVMF_PATH.patch
Normal file
38
0003-configure-define-SEABIOS_PATH-and-OVMF_PATH.patch
Normal file
@ -0,0 +1,38 @@
|
||||
From d12d422d347ca3a8fd8181b78ee2736561cd0e57 Mon Sep 17 00:00:00 2001
|
||||
From: Anthony PERARD <anthony.perard@citrix.com>
|
||||
Date: Mon, 14 Mar 2016 17:55:38 +0000
|
||||
Subject: [PATCH 03/15] configure: #define SEABIOS_PATH and OVMF_PATH
|
||||
|
||||
Those paths are to be used by libxl, in order to load the firmware in
|
||||
memory. If a system path is not define via --with-system-seabios or
|
||||
--with-system-ovmf, then this default to the Xen firmware directory.
|
||||
|
||||
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
|
||||
---
|
||||
tools/configure.ac | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
Index: xen-4.7.0-testing/tools/configure.ac
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/configure.ac
|
||||
+++ xen-4.7.0-testing/tools/configure.ac
|
||||
@@ -218,6 +218,9 @@ AC_ARG_WITH([system-seabios],
|
||||
esac
|
||||
],[])
|
||||
AC_SUBST(seabios_path)
|
||||
+AC_DEFINE_UNQUOTED([SEABIOS_PATH],
|
||||
+ ["${seabios_path:-$XENFIRMWAREDIR/seabios.bin}"],
|
||||
+ [SeaBIOS path])
|
||||
|
||||
AC_ARG_WITH([system-ovmf],
|
||||
AS_HELP_STRING([--with-system-ovmf@<:@=PATH@:>@],
|
||||
@@ -229,6 +232,9 @@ AC_ARG_WITH([system-ovmf],
|
||||
esac
|
||||
],[])
|
||||
AC_SUBST(ovmf_path)
|
||||
+AC_DEFINE_UNQUOTED([OVMF_PATH],
|
||||
+ ["${ovmf_path:-$XENFIRMWAREDIR/ovmf.bin}"],
|
||||
+ [OVMF path])
|
||||
|
||||
AC_ARG_WITH([extra-qemuu-configure-args],
|
||||
AS_HELP_STRING([--with-extra-qemuu-configure-args@<:@="--ARG1 ..."@:>@],
|
43
0004-firmware-makefile-install-BIOS-blob.patch
Normal file
43
0004-firmware-makefile-install-BIOS-blob.patch
Normal file
@ -0,0 +1,43 @@
|
||||
From b44077cb7b2844d083ddae0d2174d4ae8a5101b6 Mon Sep 17 00:00:00 2001
|
||||
From: Anthony PERARD <anthony.perard@citrix.com>
|
||||
Date: Mon, 14 Mar 2016 17:55:39 +0000
|
||||
Subject: [PATCH 04/15] firmware/makefile: install BIOS blob ...
|
||||
|
||||
... into the firmware directory, along with hvmloader.
|
||||
|
||||
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
|
||||
---
|
||||
tools/firmware/Makefile | 13 +++++++++++++
|
||||
1 file changed, 13 insertions(+)
|
||||
|
||||
Index: xen-4.7.0-testing/tools/firmware/Makefile
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/firmware/Makefile
|
||||
+++ xen-4.7.0-testing/tools/firmware/Makefile
|
||||
@@ -19,6 +19,9 @@ SUBDIRS-y += hvmloader
|
||||
|
||||
LD32BIT-$(CONFIG_FreeBSD) := LD32BIT_FLAG=-melf_i386_fbsd
|
||||
|
||||
+SEABIOS_ROM := seabios-dir/out/bios.bin
|
||||
+OVMF_ROM := ovmf-dir/ovmf.bin
|
||||
+
|
||||
ovmf-dir:
|
||||
GIT=$(GIT) $(XEN_ROOT)/scripts/git-checkout.sh $(OVMF_UPSTREAM_URL) $(OVMF_UPSTREAM_REVISION) ovmf-dir
|
||||
cp ovmf-makefile ovmf-dir/Makefile;
|
||||
@@ -45,6 +48,16 @@ endif
|
||||
install: all
|
||||
[ -d $(INST_DIR) ] || $(INSTALL_DIR) $(INST_DIR)
|
||||
[ ! -e $(TARGET) ] || $(INSTALL_DATA) $(TARGET) $(INST_DIR)
|
||||
+ifeq ($(CONFIG_SEABIOS),y)
|
||||
+ifeq ($(SEABIOS_PATH),)
|
||||
+ $(INSTALL_DATA) $(SEABIOS_ROM) $(INST_DIR)/seabios.bin
|
||||
+endif
|
||||
+endif
|
||||
+ifeq ($(CONFIG_OVMF),y)
|
||||
+ifeq ($(OVMF_PATH),)
|
||||
+ $(INSTALL_DATA) $(OVMF_ROM) $(INST_DIR)/ovmf.bin
|
||||
+endif
|
||||
+endif
|
||||
|
||||
.PHONY: clean
|
||||
clean: subdirs-clean
|
212
0005-libxl-Load-guest-BIOS-from-file.patch
Normal file
212
0005-libxl-Load-guest-BIOS-from-file.patch
Normal file
@ -0,0 +1,212 @@
|
||||
From a8eef037b010662e73428907af761b6d2aef4eae Mon Sep 17 00:00:00 2001
|
||||
From: Anthony PERARD <anthony.perard@citrix.com>
|
||||
Date: Mon, 14 Mar 2016 17:55:40 +0000
|
||||
Subject: [PATCH 05/15] libxl: Load guest BIOS from file
|
||||
|
||||
The path to the BIOS blob can be override by the xl's bios_override option,
|
||||
or provided by u.hvm.bios_firmware in the domain_build_info struct by other
|
||||
libxl user.
|
||||
|
||||
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
|
||||
---
|
||||
docs/man/xl.cfg.pod.5 | 9 +++++++
|
||||
tools/libxl/libxl.h | 8 +++++++
|
||||
tools/libxl/libxl_dom.c | 57 ++++++++++++++++++++++++++++++++++++++++++++
|
||||
tools/libxl/libxl_internal.h | 2 ++
|
||||
tools/libxl/libxl_paths.c | 10 ++++++++
|
||||
tools/libxl/libxl_types.idl | 1 +
|
||||
tools/libxl/xl_cmdimpl.c | 11 ++++++---
|
||||
7 files changed, 95 insertions(+), 3 deletions(-)
|
||||
|
||||
Index: xen-4.7.0-testing/docs/man/xl.cfg.pod.5
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/docs/man/xl.cfg.pod.5
|
||||
+++ xen-4.7.0-testing/docs/man/xl.cfg.pod.5
|
||||
@@ -1242,6 +1242,15 @@ Requires device_model_version=qemu-xen.
|
||||
|
||||
=back
|
||||
|
||||
+=item B<bios_override="PATH">
|
||||
+
|
||||
+Override the path to the blob to be used as BIOS. The blob provided here MUST
|
||||
+be consistent with the `bios` which you have specified. You should not normally
|
||||
+need to specify this option.
|
||||
+
|
||||
+This options does not have any effect if using bios="rombios" or
|
||||
+device_model_version="qemu-xen-traditional".
|
||||
+
|
||||
=item B<pae=BOOLEAN>
|
||||
|
||||
Hide or expose the IA32 Physical Address Extensions. These extensions
|
||||
Index: xen-4.7.0-testing/tools/libxl/libxl.h
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/libxl/libxl.h
|
||||
+++ xen-4.7.0-testing/tools/libxl/libxl.h
|
||||
@@ -934,6 +934,14 @@ void libxl_mac_copy(libxl_ctx *ctx, libx
|
||||
#define LIBXL_HAVE_CHECKPOINTED_STREAM 1
|
||||
|
||||
/*
|
||||
+ * LIBXL_HAVE_BUILDINFO_HVM_BIOS_FIRMWARE
|
||||
+ *
|
||||
+ * libxl_domain_build_info has u.hvm.bios_firmware field which can be use
|
||||
+ * to provide a different bios blob (like SeaBIOS or OVMF).
|
||||
+ */
|
||||
+#define LIBXL_HAVE_BUILDINFO_HVM_BIOS_FIRMWARE
|
||||
+
|
||||
+/*
|
||||
* ERROR_REMUS_XXX error code only exists from Xen 4.5, Xen 4.6 and it
|
||||
* is changed to ERROR_CHECKPOINT_XXX in Xen 4.7
|
||||
*/
|
||||
Index: xen-4.7.0-testing/tools/libxl/libxl_dom.c
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/libxl/libxl_dom.c
|
||||
+++ xen-4.7.0-testing/tools/libxl/libxl_dom.c
|
||||
@@ -866,6 +866,38 @@ err:
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static int libxl__load_hvm_firmware_module(libxl__gc *gc,
|
||||
+ const char *filename,
|
||||
+ const char *what,
|
||||
+ struct xc_hvm_firmware_module *m)
|
||||
+{
|
||||
+ int datalen = 0;
|
||||
+ void *data = NULL;
|
||||
+ int e;
|
||||
+
|
||||
+ LOG(DEBUG, "Loading %s: %s", what, filename);
|
||||
+ e = libxl_read_file_contents(CTX, filename, &data, &datalen);
|
||||
+ if (e) {
|
||||
+ /*
|
||||
+ * Print a message only on ENOENT, other error are logged by the
|
||||
+ * function libxl_read_file_contents().
|
||||
+ */
|
||||
+ if (e == ENOENT)
|
||||
+ LOGEV(ERROR, e, "failed to read %s file", what);
|
||||
+ return ERROR_FAIL;
|
||||
+ }
|
||||
+ libxl__ptr_add(gc, data);
|
||||
+ if (datalen) {
|
||||
+ /* Only accept non-empty files */
|
||||
+ m->data = data;
|
||||
+ m->length = datalen;
|
||||
+ } else {
|
||||
+ LOG(ERROR, "file %s for %s is empty", filename, what);
|
||||
+ return ERROR_INVAL;
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int libxl__domain_firmware(libxl__gc *gc,
|
||||
libxl_domain_build_info *info,
|
||||
struct xc_dom_image *dom)
|
||||
@@ -875,6 +907,7 @@ static int libxl__domain_firmware(libxl_
|
||||
int e, rc;
|
||||
int datalen = 0;
|
||||
void *data;
|
||||
+ const char *bios_filename = NULL;
|
||||
|
||||
if (info->u.hvm.firmware)
|
||||
firmware = info->u.hvm.firmware;
|
||||
@@ -918,6 +951,30 @@ static int libxl__domain_firmware(libxl_
|
||||
goto out;
|
||||
}
|
||||
|
||||
+ if (info->device_model_version == LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN) {
|
||||
+ if (info->u.hvm.bios_firmware) {
|
||||
+ bios_filename = info->u.hvm.bios_firmware;
|
||||
+ } else {
|
||||
+ switch (info->u.hvm.bios) {
|
||||
+ case LIBXL_BIOS_TYPE_SEABIOS:
|
||||
+ bios_filename = libxl__seabios_path();
|
||||
+ break;
|
||||
+ case LIBXL_BIOS_TYPE_OVMF:
|
||||
+ bios_filename = libxl__ovmf_path();
|
||||
+ break;
|
||||
+ case LIBXL_BIOS_TYPE_ROMBIOS:
|
||||
+ default:
|
||||
+ abort();
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (bios_filename) {
|
||||
+ rc = libxl__load_hvm_firmware_module(gc, bios_filename, "BIOS",
|
||||
+ &dom->bios_module);
|
||||
+ if (rc) goto out;
|
||||
+ }
|
||||
+
|
||||
if (info->u.hvm.smbios_firmware) {
|
||||
data = NULL;
|
||||
e = libxl_read_file_contents(ctx, info->u.hvm.smbios_firmware,
|
||||
Index: xen-4.7.0-testing/tools/libxl/libxl_internal.h
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/libxl/libxl_internal.h
|
||||
+++ xen-4.7.0-testing/tools/libxl/libxl_internal.h
|
||||
@@ -2314,6 +2314,8 @@ _hidden const char *libxl__xen_config_di
|
||||
_hidden const char *libxl__xen_script_dir_path(void);
|
||||
_hidden const char *libxl__lock_dir_path(void);
|
||||
_hidden const char *libxl__run_dir_path(void);
|
||||
+_hidden const char *libxl__seabios_path(void);
|
||||
+_hidden const char *libxl__ovmf_path(void);
|
||||
|
||||
/*----- subprocess execution with timeout -----*/
|
||||
|
||||
Index: xen-4.7.0-testing/tools/libxl/libxl_paths.c
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/libxl/libxl_paths.c
|
||||
+++ xen-4.7.0-testing/tools/libxl/libxl_paths.c
|
||||
@@ -35,6 +35,16 @@ const char *libxl__run_dir_path(void)
|
||||
return XEN_RUN_DIR;
|
||||
}
|
||||
|
||||
+const char *libxl__seabios_path(void)
|
||||
+{
|
||||
+ return SEABIOS_PATH;
|
||||
+}
|
||||
+
|
||||
+const char *libxl__ovmf_path(void)
|
||||
+{
|
||||
+ return OVMF_PATH;
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* Local variables:
|
||||
* mode: C
|
||||
Index: xen-4.7.0-testing/tools/libxl/libxl_types.idl
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/libxl/libxl_types.idl
|
||||
+++ xen-4.7.0-testing/tools/libxl/libxl_types.idl
|
||||
@@ -511,6 +511,7 @@ libxl_domain_build_info = Struct("domain
|
||||
("timer_mode", libxl_timer_mode),
|
||||
("nested_hvm", libxl_defbool),
|
||||
("altp2m", libxl_defbool),
|
||||
+ ("bios_firmware", string),
|
||||
("smbios_firmware", string),
|
||||
("acpi_firmware", string),
|
||||
("hdtype", libxl_hdtype),
|
||||
Index: xen-4.7.0-testing/tools/libxl/xl_cmdimpl.c
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/libxl/xl_cmdimpl.c
|
||||
+++ xen-4.7.0-testing/tools/libxl/xl_cmdimpl.c
|
||||
@@ -1680,12 +1680,17 @@ static void parse_config_data(const char
|
||||
|
||||
xlu_cfg_replace_string (config, "firmware_override",
|
||||
&b_info->u.hvm.firmware, 0);
|
||||
- if (!xlu_cfg_get_string(config, "bios", &buf, 0) &&
|
||||
- libxl_bios_type_from_string(buf, &b_info->u.hvm.bios)) {
|
||||
+ xlu_cfg_replace_string (config, "bios_override",
|
||||
+ &b_info->u.hvm.bios_firmware, 0);
|
||||
+ if (!xlu_cfg_get_string(config, "bios", &buf, 0)) {
|
||||
+ if (libxl_bios_type_from_string(buf, &b_info->u.hvm.bios)) {
|
||||
fprintf(stderr, "ERROR: invalid value \"%s\" for \"bios\"\n",
|
||||
buf);
|
||||
exit (1);
|
||||
- }
|
||||
+ }
|
||||
+ } else if (b_info->u.hvm.bios_firmware)
|
||||
+ fprintf(stderr, "WARNING: "
|
||||
+ "bios_override given without specific bios name\n");
|
||||
|
||||
xlu_cfg_get_defbool(config, "pae", &b_info->u.hvm.pae, 0);
|
||||
xlu_cfg_get_defbool(config, "apic", &b_info->u.hvm.apic, 0);
|
@ -0,0 +1,99 @@
|
||||
From b920bea09b69c1cdd5bb4c5964ce20d0bf7ced8b Mon Sep 17 00:00:00 2001
|
||||
From: Anthony PERARD <anthony.perard@citrix.com>
|
||||
Date: Mon, 14 Mar 2016 17:55:41 +0000
|
||||
Subject: [PATCH 06/15] xen: Move the hvm_start_info C representation from
|
||||
libxc to public/xen.h
|
||||
|
||||
Instead of having several representation of hvm_start_info in C, define
|
||||
it in public/xen.h so both libxc and hvmloader can use it.
|
||||
|
||||
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
|
||||
---
|
||||
tools/libxc/include/xc_dom.h | 31 -------------------------------
|
||||
xen/include/public/xen.h | 31 +++++++++++++++++++++++++++++++
|
||||
2 files changed, 31 insertions(+), 31 deletions(-)
|
||||
|
||||
Index: xen-4.7.0-testing/tools/libxc/include/xc_dom.h
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/libxc/include/xc_dom.h
|
||||
+++ xen-4.7.0-testing/tools/libxc/include/xc_dom.h
|
||||
@@ -219,37 +219,6 @@ struct xc_dom_image {
|
||||
struct xc_hvm_firmware_module smbios_module;
|
||||
};
|
||||
|
||||
-#if defined(__i386__) || defined(__x86_64__)
|
||||
-/* C representation of the x86/HVM start info layout.
|
||||
- *
|
||||
- * The canonical definition of this layout resides in public/xen.h, this
|
||||
- * is just a way to represent the layout described there using C types.
|
||||
- *
|
||||
- * NB: the packed attribute is not really needed, but it helps us enforce
|
||||
- * the fact this this is just a representation, and it might indeed
|
||||
- * be required in the future if there are alignment changes.
|
||||
- */
|
||||
-struct hvm_start_info {
|
||||
- uint32_t magic; /* Contains the magic value 0x336ec578 */
|
||||
- /* ("xEn3" with the 0x80 bit of the "E" set).*/
|
||||
- uint32_t version; /* Version of this structure. */
|
||||
- uint32_t flags; /* SIF_xxx flags. */
|
||||
- uint32_t cmdline_paddr; /* Physical address of the command line. */
|
||||
- uint32_t nr_modules; /* Number of modules passed to the kernel. */
|
||||
- uint32_t modlist_paddr; /* Physical address of an array of */
|
||||
- /* hvm_modlist_entry. */
|
||||
- uint32_t rsdp_paddr; /* Physical address of the RSDP ACPI data */
|
||||
- /* structure. */
|
||||
-} __attribute__((packed));
|
||||
-
|
||||
-struct hvm_modlist_entry {
|
||||
- uint64_t paddr; /* Physical address of the module. */
|
||||
- uint64_t size; /* Size of the module in bytes. */
|
||||
- uint64_t cmdline_paddr; /* Physical address of the command line. */
|
||||
- uint64_t reserved;
|
||||
-} __attribute__((packed));
|
||||
-#endif /* x86 */
|
||||
-
|
||||
/* --- pluggable kernel loader ------------------------------------- */
|
||||
|
||||
struct xc_dom_loader {
|
||||
Index: xen-4.7.0-testing/xen/include/public/xen.h
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/xen/include/public/xen.h
|
||||
+++ xen-4.7.0-testing/xen/include/public/xen.h
|
||||
@@ -858,6 +858,37 @@ typedef struct start_info start_info_t;
|
||||
*/
|
||||
#define XEN_HVM_START_MAGIC_VALUE 0x336ec578
|
||||
|
||||
+#if defined(__i386__) || defined(__x86_64__)
|
||||
+/* C representation of the x86/HVM start info layout.
|
||||
+ *
|
||||
+ * The canonical definition of this layout is abrove, this is just a way to
|
||||
+ * represent the layout described there using C types.
|
||||
+ *
|
||||
+ * NB: the packed attribute is not really needed, but it helps us enforce
|
||||
+ * the fact this this is just a representation, and it might indeed
|
||||
+ * be required in the future if there are alignment changes.
|
||||
+ */
|
||||
+struct hvm_start_info {
|
||||
+ uint32_t magic; /* Contains the magic value 0x336ec578 */
|
||||
+ /* ("xEn3" with the 0x80 bit of the "E" set).*/
|
||||
+ uint32_t version; /* Version of this structure. */
|
||||
+ uint32_t flags; /* SIF_xxx flags. */
|
||||
+ uint32_t cmdline_paddr; /* Physical address of the command line. */
|
||||
+ uint32_t nr_modules; /* Number of modules passed to the kernel. */
|
||||
+ uint32_t modlist_paddr; /* Physical address of an array of */
|
||||
+ /* hvm_modlist_entry. */
|
||||
+ uint32_t rsdp_paddr; /* Physical address of the RSDP ACPI data */
|
||||
+ /* structure. */
|
||||
+} __attribute__((packed));
|
||||
+
|
||||
+struct hvm_modlist_entry {
|
||||
+ uint64_t paddr; /* Physical address of the module. */
|
||||
+ uint64_t size; /* Size of the module in bytes. */
|
||||
+ uint64_t cmdline_paddr; /* Physical address of the command line. */
|
||||
+ uint64_t reserved;
|
||||
+} __attribute__((packed));
|
||||
+#endif /* x86 */
|
||||
+
|
||||
/* New console union for dom0 introduced in 0x00030203. */
|
||||
#if __XEN_INTERFACE_VERSION__ < 0x00030203
|
||||
#define console_mfn console.domU.mfn
|
55
0007-hvmloader-Grab-the-hvm_start_info-pointer.patch
Normal file
55
0007-hvmloader-Grab-the-hvm_start_info-pointer.patch
Normal file
@ -0,0 +1,55 @@
|
||||
From e3d13cec19a919b06dea49edd64a50c68e1094a7 Mon Sep 17 00:00:00 2001
|
||||
From: Anthony PERARD <anthony.perard@citrix.com>
|
||||
Date: Mon, 14 Mar 2016 17:55:42 +0000
|
||||
Subject: [PATCH 07/15] hvmloader: Grab the hvm_start_info pointer
|
||||
|
||||
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
|
||||
---
|
||||
tools/firmware/hvmloader/hvmloader.c | 5 +++++
|
||||
tools/firmware/hvmloader/util.h | 3 +++
|
||||
2 files changed, 8 insertions(+)
|
||||
|
||||
Index: xen-4.7.0-testing/tools/firmware/hvmloader/hvmloader.c
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/firmware/hvmloader/hvmloader.c
|
||||
+++ xen-4.7.0-testing/tools/firmware/hvmloader/hvmloader.c
|
||||
@@ -29,6 +29,8 @@
|
||||
#include <xen/version.h>
|
||||
#include <xen/hvm/params.h>
|
||||
|
||||
+const struct hvm_start_info *hvm_start_info;
|
||||
+
|
||||
asm (
|
||||
" .text \n"
|
||||
" .globl _start \n"
|
||||
@@ -46,6 +48,8 @@ asm (
|
||||
" ljmp $"STR(SEL_CODE32)",$1f \n"
|
||||
"1: movl $stack_top,%esp \n"
|
||||
" movl %esp,%ebp \n"
|
||||
+ /* store HVM start info ptr */
|
||||
+ " mov %ebx, hvm_start_info \n"
|
||||
" call main \n"
|
||||
/* Relocate real-mode trampoline to 0x0. */
|
||||
" mov $trampoline_start,%esi \n"
|
||||
@@ -258,6 +262,7 @@ int main(void)
|
||||
memset((void *)HYPERCALL_PHYSICAL_ADDRESS, 0xc3 /* RET */, PAGE_SIZE);
|
||||
|
||||
printf("HVM Loader\n");
|
||||
+ BUG_ON(hvm_start_info->magic != XEN_HVM_START_MAGIC_VALUE);
|
||||
|
||||
init_hypercalls();
|
||||
|
||||
Index: xen-4.7.0-testing/tools/firmware/hvmloader/util.h
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/firmware/hvmloader/util.h
|
||||
+++ xen-4.7.0-testing/tools/firmware/hvmloader/util.h
|
||||
@@ -158,6 +158,9 @@ static inline void cpu_relax(void)
|
||||
struct hvm_info_table *get_hvm_info_table(void) __attribute__ ((const));
|
||||
#define hvm_info (get_hvm_info_table())
|
||||
|
||||
+/* HVM start info */
|
||||
+extern const struct hvm_start_info *hvm_start_info;
|
||||
+
|
||||
/* String and memory functions */
|
||||
int strcmp(const char *cs, const char *ct);
|
||||
int strncmp(const char *s1, const char *s2, uint32_t n);
|
139
0008-hvmloader-Locate-the-BIOS-blob.patch
Normal file
139
0008-hvmloader-Locate-the-BIOS-blob.patch
Normal file
@ -0,0 +1,139 @@
|
||||
From 463aedc4fd6e09518b4711e931048bf932b6ee39 Mon Sep 17 00:00:00 2001
|
||||
From: Anthony PERARD <anthony.perard@citrix.com>
|
||||
Date: Mon, 14 Mar 2016 17:55:43 +0000
|
||||
Subject: [PATCH 08/15] hvmloader: Locate the BIOS blob
|
||||
|
||||
The BIOS can be found an entry called "bios" of the modlist of the
|
||||
hvm_start_info struct.
|
||||
|
||||
The found BIOS blob is not loaded by this patch, but only passed as
|
||||
argument to bios_load() function. It is going to be used by the next few
|
||||
patches.
|
||||
|
||||
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
|
||||
---
|
||||
tools/firmware/hvmloader/config.h | 2 +-
|
||||
tools/firmware/hvmloader/hvmloader.c | 42 ++++++++++++++++++++++++++++++++++--
|
||||
tools/firmware/hvmloader/ovmf.c | 3 ++-
|
||||
tools/firmware/hvmloader/rombios.c | 3 ++-
|
||||
tools/firmware/hvmloader/util.h | 2 ++
|
||||
5 files changed, 47 insertions(+), 5 deletions(-)
|
||||
|
||||
Index: xen-4.7.0-testing/tools/firmware/hvmloader/config.h
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/firmware/hvmloader/config.h
|
||||
+++ xen-4.7.0-testing/tools/firmware/hvmloader/config.h
|
||||
@@ -22,7 +22,7 @@ struct bios_config {
|
||||
/* ROMS */
|
||||
void (*load_roms)(void);
|
||||
|
||||
- void (*bios_load)(const struct bios_config *config);
|
||||
+ void (*bios_load)(const struct bios_config *config, void *addr, uint32_t size);
|
||||
|
||||
void (*bios_info_setup)(void);
|
||||
void (*bios_info_finish)(void);
|
||||
Index: xen-4.7.0-testing/tools/firmware/hvmloader/hvmloader.c
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/firmware/hvmloader/hvmloader.c
|
||||
+++ xen-4.7.0-testing/tools/firmware/hvmloader/hvmloader.c
|
||||
@@ -253,10 +253,40 @@ static void acpi_enable_sci(void)
|
||||
BUG_ON(!(pm1a_cnt_val & ACPI_PM1C_SCI_EN));
|
||||
}
|
||||
|
||||
+const struct hvm_modlist_entry *get_module_entry(
|
||||
+ const struct hvm_start_info *info,
|
||||
+ const char *name)
|
||||
+{
|
||||
+ const struct hvm_modlist_entry *modlist =
|
||||
+ (struct hvm_modlist_entry *)info->modlist_paddr;
|
||||
+ unsigned int i;
|
||||
+
|
||||
+ if ( !modlist )
|
||||
+ return NULL;
|
||||
+
|
||||
+ for ( i = 0; i < info->nr_modules; i++ )
|
||||
+ {
|
||||
+ uint32_t module_name = modlist[i].cmdline_paddr;
|
||||
+
|
||||
+ BUG_ON(!modlist[i].cmdline_paddr ||
|
||||
+ modlist[i].cmdline_paddr > UINT_MAX);
|
||||
+
|
||||
+ if ( !strcmp(name, (char*)module_name) )
|
||||
+ {
|
||||
+ BUG_ON(!modlist[i].paddr || modlist[i].paddr > UINT_MAX ||
|
||||
+ modlist[i].size > UINT_MAX);
|
||||
+ return &modlist[i];
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
int main(void)
|
||||
{
|
||||
const struct bios_config *bios;
|
||||
int acpi_enabled;
|
||||
+ const struct hvm_modlist_entry *bios_module;
|
||||
|
||||
/* Initialise hypercall stubs with RET, rendering them no-ops. */
|
||||
memset((void *)HYPERCALL_PHYSICAL_ADDRESS, 0xc3 /* RET */, PAGE_SIZE);
|
||||
@@ -292,8 +322,16 @@ int main(void)
|
||||
}
|
||||
|
||||
printf("Loading %s ...\n", bios->name);
|
||||
- if ( bios->bios_load )
|
||||
- bios->bios_load(bios);
|
||||
+ bios_module = get_module_entry(hvm_start_info, "bios");
|
||||
+ if ( bios_module && bios->bios_load )
|
||||
+ {
|
||||
+ uint32_t paddr = bios_module->paddr;
|
||||
+ bios->bios_load(bios, (void*)paddr, bios_module->size);
|
||||
+ }
|
||||
+ else if ( bios->bios_load )
|
||||
+ {
|
||||
+ bios->bios_load(bios, 0, 0);
|
||||
+ }
|
||||
else
|
||||
{
|
||||
BUG_ON(bios->bios_address + bios->image_size >
|
||||
Index: xen-4.7.0-testing/tools/firmware/hvmloader/ovmf.c
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/firmware/hvmloader/ovmf.c
|
||||
+++ xen-4.7.0-testing/tools/firmware/hvmloader/ovmf.c
|
||||
@@ -93,7 +93,8 @@ static void ovmf_finish_bios_info(void)
|
||||
info->checksum = -checksum;
|
||||
}
|
||||
|
||||
-static void ovmf_load(const struct bios_config *config)
|
||||
+static void ovmf_load(const struct bios_config *config,
|
||||
+ void *bios_addr, uint32_t bios_length)
|
||||
{
|
||||
xen_pfn_t mfn;
|
||||
uint64_t addr = OVMF_BEGIN;
|
||||
Index: xen-4.7.0-testing/tools/firmware/hvmloader/rombios.c
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/firmware/hvmloader/rombios.c
|
||||
+++ xen-4.7.0-testing/tools/firmware/hvmloader/rombios.c
|
||||
@@ -121,7 +121,8 @@ static void rombios_load_roms(void)
|
||||
option_rom_phys_addr + option_rom_sz - 1);
|
||||
}
|
||||
|
||||
-static void rombios_load(const struct bios_config *config)
|
||||
+static void rombios_load(const struct bios_config *config,
|
||||
+ void *unused_addr, uint32_t unused_size)
|
||||
{
|
||||
uint32_t bioshigh;
|
||||
struct rombios_info *info;
|
||||
Index: xen-4.7.0-testing/tools/firmware/hvmloader/util.h
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/firmware/hvmloader/util.h
|
||||
+++ xen-4.7.0-testing/tools/firmware/hvmloader/util.h
|
||||
@@ -34,6 +34,8 @@ enum {
|
||||
#undef NULL
|
||||
#define NULL ((void*)0)
|
||||
|
||||
+#define UINT_MAX (~0U)
|
||||
+
|
||||
void __assert_failed(char *assertion, char *file, int line)
|
||||
__attribute__((noreturn));
|
||||
#define ASSERT(p) \
|
@ -0,0 +1,44 @@
|
||||
From c3f4c5bcf0d8d93b5116f3e368c4739abe2dc06d Mon Sep 17 00:00:00 2001
|
||||
From: Anthony PERARD <anthony.perard@citrix.com>
|
||||
Date: Mon, 14 Mar 2016 17:55:44 +0000
|
||||
Subject: [PATCH 09/15] hvmloader: Check modules whereabouts in perform_tests
|
||||
|
||||
As perform_tests() is going to clear memory past 4MB, we check that the
|
||||
memory can be use or we skip the tests.
|
||||
|
||||
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
|
||||
---
|
||||
tools/firmware/hvmloader/tests.c | 20 ++++++++++++++++++++
|
||||
1 file changed, 20 insertions(+)
|
||||
|
||||
Index: xen-4.7.0-testing/tools/firmware/hvmloader/tests.c
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/firmware/hvmloader/tests.c
|
||||
+++ xen-4.7.0-testing/tools/firmware/hvmloader/tests.c
|
||||
@@ -210,6 +210,26 @@ void perform_tests(void)
|
||||
return;
|
||||
}
|
||||
|
||||
+ /* Check that tests does not use memory where modules are stored */
|
||||
+ if ( ((uint32_t)hvm_start_info + sizeof(struct hvm_start_info)) > 4 << 20
|
||||
+ && (uint32_t)hvm_start_info < 8 << 20 )
|
||||
+ {
|
||||
+ printf("Skipping tests due to memory used by hvm_start_info\n");
|
||||
+ return;
|
||||
+ }
|
||||
+ for ( unsigned i = 0; i < hvm_start_info->nr_modules; i++ )
|
||||
+ {
|
||||
+ const struct hvm_modlist_entry *modlist =
|
||||
+ (struct hvm_modlist_entry *)hvm_start_info->modlist_paddr;
|
||||
+ if ( modlist[i].paddr
|
||||
+ && modlist[i].paddr + modlist[i].size > 4ul << 20
|
||||
+ && modlist[i].paddr < 8ul << 20 )
|
||||
+ {
|
||||
+ printf("Skipping tests due to memory used by a module\n");
|
||||
+ return;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
passed = skipped = 0;
|
||||
for ( i = 0; tests[i].test; i++ )
|
||||
{
|
112
0010-hvmloader-Load-SeaBIOS-from-hvm_start_info-modules.patch
Normal file
112
0010-hvmloader-Load-SeaBIOS-from-hvm_start_info-modules.patch
Normal file
@ -0,0 +1,112 @@
|
||||
From df9fdafcfc38c931181dae1de3e6a9eee28829d4 Mon Sep 17 00:00:00 2001
|
||||
From: Anthony PERARD <anthony.perard@citrix.com>
|
||||
Date: Mon, 14 Mar 2016 17:55:45 +0000
|
||||
Subject: [PATCH 10/15] hvmloader: Load SeaBIOS from hvm_start_info modules
|
||||
|
||||
... and do not include the SeaBIOS ROM into hvmloader anymore.
|
||||
|
||||
This also fix the dependency on roms.inc, hvmloader.o does not include it.
|
||||
|
||||
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
|
||||
---
|
||||
tools/firmware/hvmloader/Makefile | 15 +--------------
|
||||
tools/firmware/hvmloader/seabios.c | 24 ++++++++++++++----------
|
||||
2 files changed, 15 insertions(+), 24 deletions(-)
|
||||
|
||||
Index: xen-4.7.0-testing/tools/firmware/hvmloader/Makefile
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/firmware/hvmloader/Makefile
|
||||
+++ xen-4.7.0-testing/tools/firmware/hvmloader/Makefile
|
||||
@@ -45,7 +45,6 @@ CIRRUSVGA_DEBUG ?= n
|
||||
|
||||
OVMF_DIR := ../ovmf-dir
|
||||
ROMBIOS_DIR := ../rombios
|
||||
-SEABIOS_DIR := ../seabios-dir
|
||||
|
||||
ifeq ($(CONFIG_ROMBIOS),y)
|
||||
STDVGA_ROM := ../vgabios/VGABIOS-lgpl-latest.bin
|
||||
@@ -80,19 +79,13 @@ endif
|
||||
ifeq ($(CONFIG_SEABIOS),y)
|
||||
OBJS += seabios.o
|
||||
CFLAGS += -DENABLE_SEABIOS
|
||||
-ifeq ($(SEABIOS_PATH),)
|
||||
- SEABIOS_ROM := $(SEABIOS_DIR)/out/bios.bin
|
||||
-else
|
||||
- SEABIOS_ROM := $(SEABIOS_PATH)
|
||||
-endif
|
||||
-ROMS += $(SEABIOS_ROM)
|
||||
endif
|
||||
|
||||
.PHONY: all
|
||||
all: subdirs-all
|
||||
$(MAKE) hvmloader
|
||||
|
||||
-ovmf.o rombios.o seabios.o hvmloader.o: roms.inc
|
||||
+ovmf.o rombios.o: roms.inc
|
||||
smbios.o: CFLAGS += -D__SMBIOS_DATE__="\"$(SMBIOS_REL_DATE)\""
|
||||
|
||||
hvmloader: $(OBJS) acpi/acpi.a
|
||||
@@ -109,12 +102,6 @@ ifneq ($(ROMBIOS_ROM),)
|
||||
echo "#endif" >> $@.new
|
||||
endif
|
||||
|
||||
-ifneq ($(SEABIOS_ROM),)
|
||||
- echo "#ifdef ROM_INCLUDE_SEABIOS" >> $@.new
|
||||
- sh ./mkhex seabios $(SEABIOS_ROM) >> $@.new
|
||||
- echo "#endif" >> $@.new
|
||||
-endif
|
||||
-
|
||||
ifneq ($(OVMF_ROM),)
|
||||
echo "#ifdef ROM_INCLUDE_OVMF" >> $@.new
|
||||
sh ./mkhex ovmf $(OVMF_ROM) >> $@.new
|
||||
Index: xen-4.7.0-testing/tools/firmware/hvmloader/seabios.c
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/firmware/hvmloader/seabios.c
|
||||
+++ xen-4.7.0-testing/tools/firmware/hvmloader/seabios.c
|
||||
@@ -27,9 +27,6 @@
|
||||
#include "smbios_types.h"
|
||||
#include "acpi/acpi2_0.h"
|
||||
|
||||
-#define ROM_INCLUDE_SEABIOS
|
||||
-#include "roms.inc"
|
||||
-
|
||||
extern unsigned char dsdt_anycpu_qemu_xen[];
|
||||
extern int dsdt_anycpu_qemu_xen_len;
|
||||
|
||||
@@ -127,22 +124,29 @@ static void seabios_setup_e820(void)
|
||||
struct e820entry *e820 = scratch_alloc(sizeof(struct e820entry)*16, 0);
|
||||
info->e820 = (uint32_t)e820;
|
||||
|
||||
+ BUG_ON(seabios_config.bios_address < 0xc0000 || seabios_config.bios_address >= 0x100000);
|
||||
/* SeaBIOS reserves memory in e820 as necessary so no low reservation. */
|
||||
- info->e820_nr = build_e820_table(e820, 0, 0x100000-sizeof(seabios));
|
||||
+ info->e820_nr = build_e820_table(e820, 0, seabios_config.bios_address);
|
||||
dump_e820_table(e820, info->e820_nr);
|
||||
}
|
||||
|
||||
-struct bios_config seabios_config = {
|
||||
- .name = "SeaBIOS",
|
||||
+static void seabios_load(const struct bios_config *bios,
|
||||
+ void *bios_addr, uint32_t bios_length)
|
||||
+{
|
||||
+ unsigned int bios_dest = 0x100000 - bios_length;
|
||||
|
||||
- .image = seabios,
|
||||
- .image_size = sizeof(seabios),
|
||||
+ BUG_ON(bios_dest + bios_length > HVMLOADER_PHYSICAL_ADDRESS);
|
||||
+ memcpy((void *)bios_dest, bios_addr, bios_length);
|
||||
+ seabios_config.bios_address = bios_dest;
|
||||
+ seabios_config.image_size = bios_length;
|
||||
+}
|
||||
|
||||
- .bios_address = 0x100000 - sizeof(seabios),
|
||||
+struct bios_config seabios_config = {
|
||||
+ .name = "SeaBIOS",
|
||||
|
||||
.load_roms = NULL,
|
||||
|
||||
- .bios_load = NULL,
|
||||
+ .bios_load = seabios_load,
|
||||
|
||||
.bios_info_setup = seabios_setup_bios_info,
|
||||
.bios_info_finish = seabios_finish_bios_info,
|
131
0011-hvmloader-Load-OVMF-from-modules.patch
Normal file
131
0011-hvmloader-Load-OVMF-from-modules.patch
Normal file
@ -0,0 +1,131 @@
|
||||
From 009fef2fc4bdffd1c9e5caf557157b4949d3842b Mon Sep 17 00:00:00 2001
|
||||
From: Anthony PERARD <anthony.perard@citrix.com>
|
||||
Date: Mon, 14 Mar 2016 17:55:46 +0000
|
||||
Subject: [PATCH 11/15] hvmloader: Load OVMF from modules
|
||||
|
||||
... and do not include the OVMF ROM into hvmloader anymore.
|
||||
|
||||
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
|
||||
---
|
||||
tools/firmware/hvmloader/Makefile | 15 +--------------
|
||||
tools/firmware/hvmloader/ovmf.c | 30 +++++++++++++-----------------
|
||||
2 files changed, 14 insertions(+), 31 deletions(-)
|
||||
|
||||
Index: xen-4.7.0-testing/tools/firmware/hvmloader/Makefile
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/firmware/hvmloader/Makefile
|
||||
+++ xen-4.7.0-testing/tools/firmware/hvmloader/Makefile
|
||||
@@ -43,7 +43,6 @@ endif
|
||||
|
||||
CIRRUSVGA_DEBUG ?= n
|
||||
|
||||
-OVMF_DIR := ../ovmf-dir
|
||||
ROMBIOS_DIR := ../rombios
|
||||
|
||||
ifeq ($(CONFIG_ROMBIOS),y)
|
||||
@@ -61,12 +60,6 @@ ROMS :=
|
||||
ifeq ($(CONFIG_OVMF),y)
|
||||
OBJS += ovmf.o
|
||||
CFLAGS += -DENABLE_OVMF
|
||||
-ifeq ($(OVMF_PATH),)
|
||||
- OVMF_ROM := $(OVMF_DIR)/ovmf.bin
|
||||
-else
|
||||
- OVMF_ROM := $(OVMF_PATH)
|
||||
-endif
|
||||
-ROMS += $(OVMF_ROM)
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_ROMBIOS),y)
|
||||
@@ -85,7 +78,7 @@ endif
|
||||
all: subdirs-all
|
||||
$(MAKE) hvmloader
|
||||
|
||||
-ovmf.o rombios.o: roms.inc
|
||||
+rombios.o: roms.inc
|
||||
smbios.o: CFLAGS += -D__SMBIOS_DATE__="\"$(SMBIOS_REL_DATE)\""
|
||||
|
||||
hvmloader: $(OBJS) acpi/acpi.a
|
||||
@@ -102,12 +95,6 @@ ifneq ($(ROMBIOS_ROM),)
|
||||
echo "#endif" >> $@.new
|
||||
endif
|
||||
|
||||
-ifneq ($(OVMF_ROM),)
|
||||
- echo "#ifdef ROM_INCLUDE_OVMF" >> $@.new
|
||||
- sh ./mkhex ovmf $(OVMF_ROM) >> $@.new
|
||||
- echo "#endif" >> $@.new
|
||||
-endif
|
||||
-
|
||||
ifneq ($(STDVGA_ROM),)
|
||||
echo "#ifdef ROM_INCLUDE_VGABIOS" >> $@.new
|
||||
sh ./mkhex vgabios_stdvga $(STDVGA_ROM) >> $@.new
|
||||
Index: xen-4.7.0-testing/tools/firmware/hvmloader/ovmf.c
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/firmware/hvmloader/ovmf.c
|
||||
+++ xen-4.7.0-testing/tools/firmware/hvmloader/ovmf.c
|
||||
@@ -34,17 +34,10 @@
|
||||
#include <xen/hvm/ioreq.h>
|
||||
#include <xen/memory.h>
|
||||
|
||||
-#define ROM_INCLUDE_OVMF
|
||||
-#include "roms.inc"
|
||||
-
|
||||
-#define OVMF_SIZE (sizeof(ovmf))
|
||||
#define OVMF_MAXOFFSET 0x000FFFFFULL
|
||||
-#define OVMF_BEGIN (0x100000000ULL - ((OVMF_SIZE + OVMF_MAXOFFSET) & ~OVMF_MAXOFFSET))
|
||||
-#define OVMF_END (OVMF_BEGIN + OVMF_SIZE)
|
||||
#define LOWCHUNK_BEGIN 0x000F0000
|
||||
#define LOWCHUNK_SIZE 0x00010000
|
||||
#define LOWCHUNK_MAXOFFSET 0x0000FFFF
|
||||
-#define LOWCHUNK_END (OVMF_BEGIN + OVMF_SIZE)
|
||||
#define OVMF_INFO_PHYSICAL_ADDRESS 0x00001000
|
||||
|
||||
extern unsigned char dsdt_anycpu_qemu_xen[];
|
||||
@@ -97,24 +90,31 @@ static void ovmf_load(const struct bios_
|
||||
void *bios_addr, uint32_t bios_length)
|
||||
{
|
||||
xen_pfn_t mfn;
|
||||
- uint64_t addr = OVMF_BEGIN;
|
||||
+ uint64_t addr = 0x100000000ULL
|
||||
+ - ((bios_length + OVMF_MAXOFFSET) & ~OVMF_MAXOFFSET);
|
||||
+ uint64_t ovmf_end = addr + bios_length;
|
||||
+
|
||||
+ ovmf_config.bios_address = addr;
|
||||
+ ovmf_config.image_size = bios_length;
|
||||
|
||||
/* Copy low-reset vector portion. */
|
||||
- memcpy((void *) LOWCHUNK_BEGIN, (uint8_t *) config->image
|
||||
- + OVMF_SIZE
|
||||
- - LOWCHUNK_SIZE,
|
||||
+ memcpy((void *) LOWCHUNK_BEGIN,
|
||||
+ (uint8_t *) bios_addr + bios_length - LOWCHUNK_SIZE,
|
||||
LOWCHUNK_SIZE);
|
||||
|
||||
/* Ensure we have backing page prior to moving FD. */
|
||||
- while ( (addr >> PAGE_SHIFT) != (OVMF_END >> PAGE_SHIFT) )
|
||||
+ while ( (addr >> PAGE_SHIFT) != (ovmf_end >> PAGE_SHIFT) )
|
||||
{
|
||||
mfn = (uint32_t) (addr >> PAGE_SHIFT);
|
||||
addr += PAGE_SIZE;
|
||||
mem_hole_populate_ram(mfn, 1);
|
||||
}
|
||||
|
||||
+ /* Check that source and destination does not overlaps. */
|
||||
+ BUG_ON(addr + bios_length > (unsigned)bios_addr
|
||||
+ && addr < (unsigned)bios_addr + bios_length);
|
||||
/* Copy FD. */
|
||||
- memcpy((void *) OVMF_BEGIN, config->image, OVMF_SIZE);
|
||||
+ memcpy((void *) ovmf_config.bios_address, bios_addr, bios_length);
|
||||
}
|
||||
|
||||
static void ovmf_acpi_build_tables(void)
|
||||
@@ -151,10 +151,6 @@ static void ovmf_setup_e820(void)
|
||||
struct bios_config ovmf_config = {
|
||||
.name = "OVMF",
|
||||
|
||||
- .image = ovmf,
|
||||
- .image_size = sizeof(ovmf),
|
||||
-
|
||||
- .bios_address = OVMF_BEGIN,
|
||||
.bios_load = ovmf_load,
|
||||
|
||||
.load_roms = 0,
|
51
0012-hvmloader-Specific-bios_load-function-required.patch
Normal file
51
0012-hvmloader-Specific-bios_load-function-required.patch
Normal file
@ -0,0 +1,51 @@
|
||||
From 258c5050f08bdf69394dd8790398b6dfe453886e Mon Sep 17 00:00:00 2001
|
||||
From: Anthony PERARD <anthony.perard@citrix.com>
|
||||
Date: Mon, 14 Mar 2016 17:55:47 +0000
|
||||
Subject: [PATCH 12/15] hvmloader: Specific bios_load function required
|
||||
|
||||
All BIOS but ROMBIOS needs to be loaded via modules.
|
||||
|
||||
ROMBIOS is handled as a special case.
|
||||
|
||||
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
|
||||
Acked-by: Jan Beulich <jbeulich@suse.com>
|
||||
---
|
||||
tools/firmware/hvmloader/hvmloader.c | 16 ++++++++++------
|
||||
1 file changed, 10 insertions(+), 6 deletions(-)
|
||||
|
||||
Index: xen-4.7.0-testing/tools/firmware/hvmloader/hvmloader.c
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/firmware/hvmloader/hvmloader.c
|
||||
+++ xen-4.7.0-testing/tools/firmware/hvmloader/hvmloader.c
|
||||
@@ -323,21 +323,25 @@ int main(void)
|
||||
|
||||
printf("Loading %s ...\n", bios->name);
|
||||
bios_module = get_module_entry(hvm_start_info, "bios");
|
||||
- if ( bios_module && bios->bios_load )
|
||||
+ if ( bios_module )
|
||||
{
|
||||
uint32_t paddr = bios_module->paddr;
|
||||
bios->bios_load(bios, (void*)paddr, bios_module->size);
|
||||
}
|
||||
- else if ( bios->bios_load )
|
||||
+#ifdef ENABLE_ROMBIOS
|
||||
+ else if ( bios == &rombios_config )
|
||||
{
|
||||
bios->bios_load(bios, 0, 0);
|
||||
}
|
||||
+#endif
|
||||
else
|
||||
{
|
||||
- BUG_ON(bios->bios_address + bios->image_size >
|
||||
- HVMLOADER_PHYSICAL_ADDRESS);
|
||||
- memcpy((void *)bios->bios_address, bios->image,
|
||||
- bios->image_size);
|
||||
+ /*
|
||||
+ * If there is no BIOS module supplied and if there is no embeded BIOS
|
||||
+ * image, then we failed. Only rombios might have an embedded bios blob.
|
||||
+ */
|
||||
+ printf("no BIOS ROM image found\n");
|
||||
+ BUG();
|
||||
}
|
||||
|
||||
if ( (hvm_info->nr_vcpus > 1) || hvm_info->apic_mode )
|
65
0013-hvmloader-Always-build-in-SeaBIOS-and-OVMF-loader.patch
Normal file
65
0013-hvmloader-Always-build-in-SeaBIOS-and-OVMF-loader.patch
Normal file
@ -0,0 +1,65 @@
|
||||
From e7497ead178f01fd5c94cfb8506d31b77cc38c94 Mon Sep 17 00:00:00 2001
|
||||
From: Anthony PERARD <anthony.perard@citrix.com>
|
||||
Date: Mon, 14 Mar 2016 17:55:48 +0000
|
||||
Subject: [PATCH 13/15] hvmloader: Always build-in SeaBIOS and OVMF loader
|
||||
|
||||
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
|
||||
Acked-by: Jan Beulich <jbeulich@suse.com>
|
||||
---
|
||||
tools/firmware/hvmloader/Makefile | 11 +----------
|
||||
tools/firmware/hvmloader/hvmloader.c | 4 ----
|
||||
2 files changed, 1 insertion(+), 14 deletions(-)
|
||||
|
||||
Index: xen-4.7.0-testing/tools/firmware/hvmloader/Makefile
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/firmware/hvmloader/Makefile
|
||||
+++ xen-4.7.0-testing/tools/firmware/hvmloader/Makefile
|
||||
@@ -37,6 +37,7 @@ OBJS = hvmloader.o mp_tables.o util.o s
|
||||
OBJS += smp.o cacheattr.o xenbus.o vnuma.o
|
||||
OBJS += e820.o pci.o pir.o ctype.o
|
||||
OBJS += hvm_param.o
|
||||
+OBJS += ovmf.o seabios.o
|
||||
ifeq ($(debug),y)
|
||||
OBJS += tests.o
|
||||
endif
|
||||
@@ -57,11 +58,6 @@ endif
|
||||
|
||||
ROMS :=
|
||||
|
||||
-ifeq ($(CONFIG_OVMF),y)
|
||||
-OBJS += ovmf.o
|
||||
-CFLAGS += -DENABLE_OVMF
|
||||
-endif
|
||||
-
|
||||
ifeq ($(CONFIG_ROMBIOS),y)
|
||||
OBJS += optionroms.o 32bitbios_support.o rombios.o
|
||||
CFLAGS += -DENABLE_ROMBIOS
|
||||
@@ -69,11 +65,6 @@ ROMBIOS_ROM := $(ROMBIOS_DIR)/BIOS-bochs
|
||||
ROMS += $(ROMBIOS_ROM) $(STDVGA_ROM) $(CIRRUSVGA_ROM) $(ETHERBOOT_ROMS)
|
||||
endif
|
||||
|
||||
-ifeq ($(CONFIG_SEABIOS),y)
|
||||
-OBJS += seabios.o
|
||||
-CFLAGS += -DENABLE_SEABIOS
|
||||
-endif
|
||||
-
|
||||
.PHONY: all
|
||||
all: subdirs-all
|
||||
$(MAKE) hvmloader
|
||||
Index: xen-4.7.0-testing/tools/firmware/hvmloader/hvmloader.c
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/firmware/hvmloader/hvmloader.c
|
||||
+++ xen-4.7.0-testing/tools/firmware/hvmloader/hvmloader.c
|
||||
@@ -209,12 +209,8 @@ struct bios_info {
|
||||
#ifdef ENABLE_ROMBIOS
|
||||
{ "rombios", &rombios_config, },
|
||||
#endif
|
||||
-#ifdef ENABLE_SEABIOS
|
||||
{ "seabios", &seabios_config, },
|
||||
-#endif
|
||||
-#ifdef ENABLE_OVMF
|
||||
{ "ovmf", &ovmf_config, },
|
||||
-#endif
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
@ -0,0 +1,84 @@
|
||||
From d42d9e59472e2c637776245db8e80de0b907d46b Mon Sep 17 00:00:00 2001
|
||||
From: Anthony PERARD <anthony.perard@citrix.com>
|
||||
Date: Mon, 14 Mar 2016 17:55:49 +0000
|
||||
Subject: [PATCH 14/15] configure: do not depend on SEABIOS_PATH or OVMF_PATH
|
||||
...
|
||||
|
||||
... to compile SeaBIOS and OVMF. Only depends on CONFIG_*.
|
||||
|
||||
If --with-system-* configure option is used, then set *_CONFIG=n to not
|
||||
compile SEABIOS and OVMF.
|
||||
|
||||
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
|
||||
---
|
||||
tools/configure.ac | 6 ++++--
|
||||
tools/firmware/Makefile | 8 --------
|
||||
2 files changed, 4 insertions(+), 10 deletions(-)
|
||||
|
||||
Index: xen-4.7.0-testing/tools/configure.ac
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/configure.ac
|
||||
+++ xen-4.7.0-testing/tools/configure.ac
|
||||
@@ -212,12 +212,13 @@ AC_ARG_WITH([system-seabios],
|
||||
AS_HELP_STRING([--with-system-seabios@<:@=PATH@:>@],
|
||||
[Use system supplied seabios PATH instead of building and installing
|
||||
our own version]),[
|
||||
+ # Disable compilation of SeaBIOS.
|
||||
+ seabios=n
|
||||
case $withval in
|
||||
no) seabios_path= ;;
|
||||
*) seabios_path=$withval ;;
|
||||
esac
|
||||
],[])
|
||||
-AC_SUBST(seabios_path)
|
||||
AC_DEFINE_UNQUOTED([SEABIOS_PATH],
|
||||
["${seabios_path:-$XENFIRMWAREDIR/seabios.bin}"],
|
||||
[SeaBIOS path])
|
||||
@@ -226,12 +227,13 @@ AC_ARG_WITH([system-ovmf],
|
||||
AS_HELP_STRING([--with-system-ovmf@<:@=PATH@:>@],
|
||||
[Use system supplied OVMF PATH instead of building and installing
|
||||
our own version]),[
|
||||
+ # Disable compilation of OVMF.
|
||||
+ ovmf=n
|
||||
case $withval in
|
||||
no) ovmf_path= ;;
|
||||
*) ovmf_path=$withval ;;
|
||||
esac
|
||||
],[])
|
||||
-AC_SUBST(ovmf_path)
|
||||
AC_DEFINE_UNQUOTED([OVMF_PATH],
|
||||
["${ovmf_path:-$XENFIRMWAREDIR/ovmf.bin}"],
|
||||
[OVMF path])
|
||||
Index: xen-4.7.0-testing/tools/firmware/Makefile
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/firmware/Makefile
|
||||
+++ xen-4.7.0-testing/tools/firmware/Makefile
|
||||
@@ -6,12 +6,8 @@ TARGET := hvmloader/hvmloader
|
||||
INST_DIR := $(DESTDIR)$(XENFIRMWAREDIR)
|
||||
|
||||
SUBDIRS-y :=
|
||||
-ifeq ($(OVMF_PATH),)
|
||||
SUBDIRS-$(CONFIG_OVMF) += ovmf-dir
|
||||
-endif
|
||||
-ifeq ($(SEABIOS_PATH),)
|
||||
SUBDIRS-$(CONFIG_SEABIOS) += seabios-dir
|
||||
-endif
|
||||
SUBDIRS-$(CONFIG_ROMBIOS) += rombios
|
||||
SUBDIRS-$(CONFIG_ROMBIOS) += vgabios
|
||||
SUBDIRS-$(CONFIG_ROMBIOS) += etherboot
|
||||
@@ -49,15 +45,11 @@ install: all
|
||||
[ -d $(INST_DIR) ] || $(INSTALL_DIR) $(INST_DIR)
|
||||
[ ! -e $(TARGET) ] || $(INSTALL_DATA) $(TARGET) $(INST_DIR)
|
||||
ifeq ($(CONFIG_SEABIOS),y)
|
||||
-ifeq ($(SEABIOS_PATH),)
|
||||
$(INSTALL_DATA) $(SEABIOS_ROM) $(INST_DIR)/seabios.bin
|
||||
endif
|
||||
-endif
|
||||
ifeq ($(CONFIG_OVMF),y)
|
||||
-ifeq ($(OVMF_PATH),)
|
||||
$(INSTALL_DATA) $(OVMF_ROM) $(INST_DIR)/ovmf.bin
|
||||
endif
|
||||
-endif
|
||||
|
||||
.PHONY: clean
|
||||
clean: subdirs-clean
|
@ -14,7 +14,7 @@ Index: xen-4.7.0-testing/xen/include/public/arch-arm.h
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/xen/include/public/arch-arm.h
|
||||
+++ xen-4.7.0-testing/xen/include/public/arch-arm.h
|
||||
@@ -362,13 +362,13 @@ typedef uint64_t xen_callback_t;
|
||||
@@ -364,13 +364,13 @@ typedef uint64_t xen_callback_t;
|
||||
|
||||
/* 64 bit modes */
|
||||
#define PSR_MODE_BIT 0x10 /* Set iff AArch32 */
|
||||
|
@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:d1b2833f0d502a5d282da11389fc7e48ef674abf5d47777fbc8f7fcf7d744f57
|
||||
size 2877551
|
||||
oid sha256:5bc1dcb1e3c4d80009ec4710ff153cd7e0ec792741ad31a5939d828683c9b6b7
|
||||
size 2877725
|
||||
|
@ -11,7 +11,7 @@ Index: xen-4.7.0-testing/tools/libxl/libxl.c
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/libxl/libxl.c
|
||||
+++ xen-4.7.0-testing/tools/libxl/libxl.c
|
||||
@@ -2789,6 +2789,8 @@ static void device_disk_add(libxl__egc *
|
||||
@@ -2826,6 +2826,8 @@ static void device_disk_add(libxl__egc *
|
||||
flexarray_append_pair(back, "discard-enable",
|
||||
libxl_defbool_val(disk->discard_enable) ?
|
||||
"1" : "0");
|
||||
@ -24,7 +24,7 @@ Index: xen-4.7.0-testing/tools/libxl/libxl.h
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/libxl/libxl.h
|
||||
+++ xen-4.7.0-testing/tools/libxl/libxl.h
|
||||
@@ -230,6 +230,18 @@
|
||||
@@ -247,6 +247,18 @@
|
||||
#define LIBXL_HAVE_APIC_ASSIST 1
|
||||
|
||||
/*
|
||||
@ -73,10 +73,10 @@ Index: xen-4.7.0-testing/tools/libxl/libxlu_disk_l.l
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/libxl/libxlu_disk_l.l
|
||||
+++ xen-4.7.0-testing/tools/libxl/libxlu_disk_l.l
|
||||
@@ -176,6 +176,7 @@ script=[^,]*,? { STRIP(','); SAVESTRING(
|
||||
direct-io-safe,? { DPC->disk->direct_io_safe = 1; }
|
||||
discard,? { libxl_defbool_set(&DPC->disk->discard_enable, true); }
|
||||
no-discard,? { libxl_defbool_set(&DPC->disk->discard_enable, false); }
|
||||
@@ -195,6 +195,7 @@ colo-port=[^,]*,? { STRIP(','); setcolop
|
||||
colo-export=[^,]*,? { STRIP(','); SAVESTRING("colo-export", colo_export, FROMEQUALS); }
|
||||
active-disk=[^,]*,? { STRIP(','); SAVESTRING("active-disk", active_disk, FROMEQUALS); }
|
||||
hidden-disk=[^,]*,? { STRIP(','); SAVESTRING("hidden-disk", hidden_disk, FROMEQUALS); }
|
||||
+suse-diskcache-disable-flush,? { DPC->suse_diskcache_disable_flush = 1; }
|
||||
|
||||
/* the target magic parameter, eats the rest of the string */
|
||||
|
@ -76,7 +76,7 @@ Index: xen-4.7.0-testing/docs/man/xl.pod.1
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/docs/man/xl.pod.1
|
||||
+++ xen-4.7.0-testing/docs/man/xl.pod.1
|
||||
@@ -1293,6 +1293,26 @@ List virtual trusted platform modules fo
|
||||
@@ -1416,6 +1416,26 @@ List virtual trusted platform modules fo
|
||||
|
||||
=back
|
||||
|
||||
@ -107,7 +107,7 @@ Index: xen-4.7.0-testing/tools/libxl/libxl.c
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/libxl/libxl.c
|
||||
+++ xen-4.7.0-testing/tools/libxl/libxl.c
|
||||
@@ -2278,6 +2278,273 @@ int libxl_devid_to_device_vtpm(libxl_ctx
|
||||
@@ -2299,6 +2299,273 @@ int libxl_devid_to_device_vtpm(libxl_ctx
|
||||
return rc;
|
||||
}
|
||||
|
||||
@ -381,7 +381,7 @@ Index: xen-4.7.0-testing/tools/libxl/libxl.c
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
@@ -4104,6 +4371,8 @@ out:
|
||||
@@ -4250,6 +4517,8 @@ out:
|
||||
* libxl_device_vfb_destroy
|
||||
* libxl_device_usbctrl_remove
|
||||
* libxl_device_usbctrl_destroy
|
||||
@ -390,7 +390,7 @@ Index: xen-4.7.0-testing/tools/libxl/libxl.c
|
||||
*/
|
||||
#define DEFINE_DEVICE_REMOVE_EXT(type, remtype, removedestroy, f) \
|
||||
int libxl_device_##type##_##removedestroy(libxl_ctx *ctx, \
|
||||
@@ -4169,6 +4438,10 @@ DEFINE_DEVICE_REMOVE_CUSTOM(usbctrl, des
|
||||
@@ -4315,6 +4584,10 @@ DEFINE_DEVICE_REMOVE_CUSTOM(usbctrl, des
|
||||
* 1. add support for secondary consoles to xenconsoled
|
||||
* 2. dynamically add/remove qemu chardevs via qmp messages. */
|
||||
|
||||
@ -401,7 +401,7 @@ Index: xen-4.7.0-testing/tools/libxl/libxl.c
|
||||
#undef DEFINE_DEVICE_REMOVE
|
||||
#undef DEFINE_DEVICE_REMOVE_CUSTOM
|
||||
#undef DEFINE_DEVICE_REMOVE_EXT
|
||||
@@ -4182,6 +4455,7 @@ DEFINE_DEVICE_REMOVE_CUSTOM(usbctrl, des
|
||||
@@ -4328,6 +4601,7 @@ DEFINE_DEVICE_REMOVE_CUSTOM(usbctrl, des
|
||||
* libxl_device_vtpm_add
|
||||
* libxl_device_usbctrl_add
|
||||
* libxl_device_usbdev_add
|
||||
@ -409,7 +409,7 @@ Index: xen-4.7.0-testing/tools/libxl/libxl.c
|
||||
*/
|
||||
|
||||
#define DEFINE_DEVICE_ADD(type) \
|
||||
@@ -4219,6 +4493,9 @@ DEFINE_DEVICE_ADD(usbctrl)
|
||||
@@ -4365,6 +4639,9 @@ DEFINE_DEVICE_ADD(usbctrl)
|
||||
/* usb */
|
||||
DEFINE_DEVICE_ADD(usbdev)
|
||||
|
||||
@ -419,7 +419,7 @@ Index: xen-4.7.0-testing/tools/libxl/libxl.c
|
||||
#undef DEFINE_DEVICE_ADD
|
||||
|
||||
/******************************************************************************/
|
||||
@@ -6803,6 +7080,20 @@ out:
|
||||
@@ -7328,6 +7605,20 @@ out:
|
||||
return rc;
|
||||
}
|
||||
|
||||
@ -444,7 +444,7 @@ Index: xen-4.7.0-testing/tools/libxl/libxl.h
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/libxl/libxl.h
|
||||
+++ xen-4.7.0-testing/tools/libxl/libxl.h
|
||||
@@ -1658,6 +1658,26 @@ libxl_device_vtpm *libxl_device_vtpm_lis
|
||||
@@ -1721,6 +1721,26 @@ libxl_device_vtpm *libxl_device_vtpm_lis
|
||||
int libxl_device_vtpm_getinfo(libxl_ctx *ctx, uint32_t domid,
|
||||
libxl_device_vtpm *vtpm, libxl_vtpminfo *vtpminfo);
|
||||
|
||||
@ -471,7 +471,7 @@ Index: xen-4.7.0-testing/tools/libxl/libxl.h
|
||||
/* Keyboard */
|
||||
int libxl_device_vkb_add(libxl_ctx *ctx, uint32_t domid, libxl_device_vkb *vkb,
|
||||
const libxl_asyncop_how *ao_how)
|
||||
@@ -1966,6 +1986,27 @@ int libxl_fd_set_nonblock(libxl_ctx *ctx
|
||||
@@ -2063,6 +2083,27 @@ int libxl_fd_set_nonblock(libxl_ctx *ctx
|
||||
|
||||
#include <libxl_event.h>
|
||||
|
||||
@ -503,7 +503,7 @@ Index: xen-4.7.0-testing/tools/libxl/libxl_create.c
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/libxl/libxl_create.c
|
||||
+++ xen-4.7.0-testing/tools/libxl/libxl_create.c
|
||||
@@ -1164,6 +1164,7 @@ static void domcreate_rebuild_done(libxl
|
||||
@@ -1227,6 +1227,7 @@ static void domcreate_rebuild_done(libxl
|
||||
libxl__multidev_begin(ao, &dcs->multidev);
|
||||
dcs->multidev.callback = domcreate_launch_dm;
|
||||
libxl__add_disks(egc, ao, domid, d_config, &dcs->multidev);
|
||||
@ -515,7 +515,7 @@ Index: xen-4.7.0-testing/tools/libxl/libxl_device.c
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/libxl/libxl_device.c
|
||||
+++ xen-4.7.0-testing/tools/libxl/libxl_device.c
|
||||
@@ -543,6 +543,7 @@ void libxl__multidev_prepared(libxl__egc
|
||||
@@ -616,6 +616,7 @@ void libxl__multidev_prepared(libxl__egc
|
||||
* The following functions are defined:
|
||||
* libxl__add_disks
|
||||
* libxl__add_nics
|
||||
@ -523,7 +523,7 @@ Index: xen-4.7.0-testing/tools/libxl/libxl_device.c
|
||||
* libxl__add_vtpms
|
||||
* libxl__add_usbctrls
|
||||
* libxl__add_usbs
|
||||
@@ -567,9 +568,31 @@ DEFINE_DEVICES_ADD(nic)
|
||||
@@ -640,9 +641,31 @@ DEFINE_DEVICES_ADD(nic)
|
||||
DEFINE_DEVICES_ADD(vtpm)
|
||||
DEFINE_DEVICES_ADD(usbctrl)
|
||||
DEFINE_DEVICES_ADD(usbdev)
|
||||
@ -559,15 +559,15 @@ Index: xen-4.7.0-testing/tools/libxl/libxl_internal.h
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/libxl/libxl_internal.h
|
||||
+++ xen-4.7.0-testing/tools/libxl/libxl_internal.h
|
||||
@@ -1206,6 +1206,7 @@ _hidden int libxl__device_nic_setdefault
|
||||
uint32_t domid,
|
||||
libxl_domain_build_info *info);
|
||||
@@ -1219,6 +1219,7 @@ _hidden int libxl__device_disk_setdefaul
|
||||
_hidden int libxl__device_nic_setdefault(libxl__gc *gc, libxl_device_nic *nic,
|
||||
uint32_t domid);
|
||||
_hidden int libxl__device_vtpm_setdefault(libxl__gc *gc, libxl_device_vtpm *vtpm);
|
||||
+_hidden int libxl__device_vscsi_setdefault(libxl__gc *gc, libxl_device_vscsi *vscsi);
|
||||
_hidden int libxl__device_vfb_setdefault(libxl__gc *gc, libxl_device_vfb *vfb);
|
||||
_hidden int libxl__device_vkb_setdefault(libxl__gc *gc, libxl_device_vkb *vkb);
|
||||
_hidden int libxl__device_pci_setdefault(libxl__gc *gc, libxl_device_pci *pci);
|
||||
@@ -2593,6 +2594,10 @@ _hidden void libxl__device_usbdev_add(li
|
||||
@@ -2638,6 +2639,10 @@ _hidden void libxl__device_usbdev_add(li
|
||||
libxl_device_usbdev *usbdev,
|
||||
libxl__ao_device *aodev);
|
||||
|
||||
@ -578,7 +578,7 @@ Index: xen-4.7.0-testing/tools/libxl/libxl_internal.h
|
||||
/* Internal function to connect a vkb device */
|
||||
_hidden int libxl__device_vkb_add(libxl__gc *gc, uint32_t domid,
|
||||
libxl_device_vkb *vkb);
|
||||
@@ -3358,6 +3363,10 @@ _hidden void libxl__add_usbdevs(libxl__e
|
||||
@@ -3496,6 +3501,10 @@ _hidden void libxl__add_usbdevs(libxl__e
|
||||
uint32_t domid, libxl_domain_config *d_config,
|
||||
libxl__multidev *multidev);
|
||||
|
||||
@ -593,7 +593,7 @@ Index: xen-4.7.0-testing/tools/libxl/libxl_types.idl
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/libxl/libxl_types.idl
|
||||
+++ xen-4.7.0-testing/tools/libxl/libxl_types.idl
|
||||
@@ -666,6 +666,26 @@ libxl_device_channel = Struct("device_ch
|
||||
@@ -696,6 +696,26 @@ libxl_device_channel = Struct("device_ch
|
||||
])),
|
||||
])
|
||||
|
||||
@ -620,7 +620,7 @@ Index: xen-4.7.0-testing/tools/libxl/libxl_types.idl
|
||||
libxl_domain_config = Struct("domain_config", [
|
||||
("c_info", libxl_domain_create_info),
|
||||
("b_info", libxl_domain_build_info),
|
||||
@@ -683,6 +703,8 @@ libxl_domain_config = Struct("domain_con
|
||||
@@ -713,6 +733,8 @@ libxl_domain_config = Struct("domain_con
|
||||
("channels", Array(libxl_device_channel, "num_channels")),
|
||||
("usbctrls", Array(libxl_device_usbctrl, "num_usbctrls")),
|
||||
("usbdevs", Array(libxl_device_usbdev, "num_usbdevs")),
|
||||
@ -629,7 +629,7 @@ Index: xen-4.7.0-testing/tools/libxl/libxl_types.idl
|
||||
|
||||
("on_poweroff", libxl_action_on_shutdown),
|
||||
("on_reboot", libxl_action_on_shutdown),
|
||||
@@ -741,6 +763,28 @@ libxl_usbctrlinfo = Struct("usbctrlinfo"
|
||||
@@ -771,6 +793,28 @@ libxl_usbctrlinfo = Struct("usbctrlinfo"
|
||||
("ref_conn", integer),
|
||||
], dir=DIR_OUT)
|
||||
|
||||
@ -662,11 +662,11 @@ Index: xen-4.7.0-testing/tools/libxl/libxl_types_internal.idl
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/libxl/libxl_types_internal.idl
|
||||
+++ xen-4.7.0-testing/tools/libxl/libxl_types_internal.idl
|
||||
@@ -23,6 +23,7 @@ libxl__device_kind = Enumeration("device
|
||||
(7, "CONSOLE"),
|
||||
@@ -24,6 +24,7 @@ libxl__device_kind = Enumeration("device
|
||||
(8, "VTPM"),
|
||||
(9, "VUSB"),
|
||||
+ (10, "VSCSI"),
|
||||
(10, "QUSB"),
|
||||
+ (11, "VSCSI"),
|
||||
])
|
||||
|
||||
libxl__console_backend = Enumeration("console_backend", [
|
||||
@ -704,7 +704,7 @@ Index: xen-4.7.0-testing/tools/libxl/xl_cmdimpl.c
|
||||
#include <xen/hvm/e820.h>
|
||||
|
||||
#include "libxl.h"
|
||||
@@ -633,6 +635,122 @@ static void set_default_nic_values(libxl
|
||||
@@ -635,6 +637,122 @@ static void set_default_nic_values(libxl
|
||||
}
|
||||
}
|
||||
|
||||
@ -827,7 +827,7 @@ Index: xen-4.7.0-testing/tools/libxl/xl_cmdimpl.c
|
||||
static void split_string_into_string_list(const char *str,
|
||||
const char *delim,
|
||||
libxl_string_list *psl)
|
||||
@@ -1322,7 +1440,7 @@ static void parse_config_data(const char
|
||||
@@ -1326,7 +1444,7 @@ static void parse_config_data(const char
|
||||
XLU_Config *config;
|
||||
XLU_ConfigList *cpus, *vbds, *nics, *pcis, *cvfbs, *cpuids, *vtpms,
|
||||
*usbctrls, *usbdevs;
|
||||
@ -836,7 +836,7 @@ Index: xen-4.7.0-testing/tools/libxl/xl_cmdimpl.c
|
||||
int num_ioports, num_irqs, num_iomem, num_cpus, num_viridian;
|
||||
int pci_power_mgmt = 0;
|
||||
int pci_msitranslate = 0;
|
||||
@@ -1851,6 +1969,66 @@ static void parse_config_data(const char
|
||||
@@ -1855,6 +1973,66 @@ static void parse_config_data(const char
|
||||
}
|
||||
}
|
||||
|
||||
@ -903,7 +903,7 @@ Index: xen-4.7.0-testing/tools/libxl/xl_cmdimpl.c
|
||||
if (!xlu_cfg_get_list(config, "vtpm", &vtpms, 0, 0)) {
|
||||
d_config->num_vtpms = 0;
|
||||
d_config->vtpms = NULL;
|
||||
@@ -7058,6 +7236,256 @@ int main_blockdetach(int argc, char **ar
|
||||
@@ -7412,6 +7590,256 @@ int main_blockdetach(int argc, char **ar
|
||||
return rc;
|
||||
}
|
||||
|
||||
@ -1164,7 +1164,7 @@ Index: xen-4.7.0-testing/tools/libxl/xl_cmdtable.c
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/libxl/xl_cmdtable.c
|
||||
+++ xen-4.7.0-testing/tools/libxl/xl_cmdtable.c
|
||||
@@ -351,6 +351,21 @@ struct cmd_spec cmd_table[] = {
|
||||
@@ -354,6 +354,21 @@ struct cmd_spec cmd_table[] = {
|
||||
"Destroy a domain's virtual block device",
|
||||
"<Domain> <DevId>",
|
||||
},
|
||||
|
@ -2,11 +2,11 @@ Make our PV drivers work with older hosts that do not recognize the new PV driv
|
||||
|
||||
Signed-off-by: K. Y. Srinivasan <ksrinivasan@novell.com>
|
||||
|
||||
Index: xen-4.6.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
|
||||
Index: xen-4.7.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
|
||||
===================================================================
|
||||
--- xen-4.6.0-testing.orig/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
|
||||
+++ xen-4.6.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
|
||||
@@ -336,7 +336,10 @@ static int check_platform_magic(struct d
|
||||
--- xen-4.7.0-testing.orig/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
|
||||
+++ xen-4.7.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
|
||||
@@ -337,7 +337,10 @@ static int check_platform_magic(struct d
|
||||
|
||||
if (magic != XEN_IOPORT_MAGIC_VAL) {
|
||||
err = "unrecognised magic value";
|
||||
|
@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e4222728bdf6f6aa97d081e0f51074cb33d7da3e4b49b4071ba8766c0496c4ef
|
||||
size 3236984
|
||||
oid sha256:941d427153a9d2bff090a23117ba43a0cb9f30dee252819edb7e967db07ccab0
|
||||
size 3236120
|
||||
|
@ -1,8 +1,8 @@
|
||||
Index: xen-4.6.1-testing/xen/arch/x86/hvm/stdvga.c
|
||||
Index: xen-4.7.0-testing/xen/arch/x86/hvm/stdvga.c
|
||||
===================================================================
|
||||
--- xen-4.6.1-testing.orig/xen/arch/x86/hvm/stdvga.c
|
||||
+++ xen-4.6.1-testing/xen/arch/x86/hvm/stdvga.c
|
||||
@@ -166,7 +166,10 @@ static int stdvga_outb(uint64_t addr, ui
|
||||
--- xen-4.7.0-testing.orig/xen/arch/x86/hvm/stdvga.c
|
||||
+++ xen-4.7.0-testing/xen/arch/x86/hvm/stdvga.c
|
||||
@@ -167,7 +167,10 @@ static int stdvga_outb(uint64_t addr, ui
|
||||
|
||||
/* When in standard vga mode, emulate here all writes to the vram buffer
|
||||
* so we can immediately satisfy reads without waiting for qemu. */
|
||||
|
@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:510ee7906630b096e522ce0bbf26e89c201a0fe33441df9a8114e8f8cb84b189
|
||||
size 17477234
|
||||
oid sha256:e6879a00cce1f705fa881fa38c707773f03c35e0dc30d5728e3f095157a6bc24
|
||||
size 17477288
|
||||
|
@ -1,7 +1,7 @@
|
||||
Index: xen-4.6.0-testing/xen/arch/x86/platform_hypercall.c
|
||||
Index: xen-4.7.0-testing/xen/arch/x86/platform_hypercall.c
|
||||
===================================================================
|
||||
--- xen-4.6.0-testing.orig/xen/arch/x86/platform_hypercall.c
|
||||
+++ xen-4.6.0-testing/xen/arch/x86/platform_hypercall.c
|
||||
--- xen-4.7.0-testing.orig/xen/arch/x86/platform_hypercall.c
|
||||
+++ xen-4.7.0-testing/xen/arch/x86/platform_hypercall.c
|
||||
@@ -26,7 +26,7 @@
|
||||
#include <xen/symbols.h>
|
||||
#include <asm/current.h>
|
||||
@ -11,7 +11,7 @@ Index: xen-4.6.0-testing/xen/arch/x86/platform_hypercall.c
|
||||
#include <asm/edd.h>
|
||||
#include <asm/mtrr.h>
|
||||
#include <asm/io_apic.h>
|
||||
@@ -825,6 +825,41 @@ ret_t do_platform_op(XEN_GUEST_HANDLE_PA
|
||||
@@ -819,6 +819,41 @@ ret_t do_platform_op(XEN_GUEST_HANDLE_PA
|
||||
ret = -EFAULT;
|
||||
}
|
||||
break;
|
||||
@ -53,10 +53,10 @@ Index: xen-4.6.0-testing/xen/arch/x86/platform_hypercall.c
|
||||
|
||||
default:
|
||||
ret = -ENOSYS;
|
||||
Index: xen-4.6.0-testing/xen/include/public/platform.h
|
||||
Index: xen-4.7.0-testing/xen/include/public/platform.h
|
||||
===================================================================
|
||||
--- xen-4.6.0-testing.orig/xen/include/public/platform.h
|
||||
+++ xen-4.6.0-testing/xen/include/public/platform.h
|
||||
--- xen-4.7.0-testing.orig/xen/include/public/platform.h
|
||||
+++ xen-4.7.0-testing/xen/include/public/platform.h
|
||||
@@ -547,6 +547,16 @@ struct xenpf_core_parking {
|
||||
typedef struct xenpf_core_parking xenpf_core_parking_t;
|
||||
DEFINE_XEN_GUEST_HANDLE(xenpf_core_parking_t);
|
||||
|
@ -1,10 +1,10 @@
|
||||
Change default IO-APIC ack mode for single IO-APIC systems to old-style.
|
||||
|
||||
Index: xen-4.5.0-testing/xen/arch/x86/io_apic.c
|
||||
Index: xen-4.7.0-testing/xen/arch/x86/io_apic.c
|
||||
===================================================================
|
||||
--- xen-4.5.0-testing.orig/xen/arch/x86/io_apic.c
|
||||
+++ xen-4.5.0-testing/xen/arch/x86/io_apic.c
|
||||
@@ -2035,7 +2035,10 @@ void __init setup_IO_APIC(void)
|
||||
--- xen-4.7.0-testing.orig/xen/arch/x86/io_apic.c
|
||||
+++ xen-4.7.0-testing/xen/arch/x86/io_apic.c
|
||||
@@ -2030,7 +2030,10 @@ void __init setup_IO_APIC(void)
|
||||
io_apic_irqs = ~PIC_IRQS;
|
||||
|
||||
printk("ENABLING IO-APIC IRQs\n");
|
||||
|
@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:06f60bae6de030ff284a995b951148f3d47a795feb4fbb64092bdd12ec3446cd
|
||||
size 4363009
|
||||
oid sha256:458f600be1d287e71fd349df83b3f4c47dd8fff9ecc0f770509434ce7f5511cb
|
||||
size 4409813
|
||||
|
25
xen.changes
25
xen.changes
@ -1,3 +1,28 @@
|
||||
-------------------------------------------------------------------
|
||||
Fri Apr 1 20:14:38 UTC 2016 - jfehlig@suse.com
|
||||
|
||||
- Add patches from proposed upstream series to load BIOS's from
|
||||
the toolstack instead of embedding in hvmloader
|
||||
http://lists.xenproject.org/archives/html/xen-devel/2016-03/msg01626.html
|
||||
0001-libxc-Rework-extra-module-initialisation.patch,
|
||||
0002-libxc-Prepare-a-start-info-structure-for-hvmloader.patch,
|
||||
0003-configure-define-SEABIOS_PATH-and-OVMF_PATH.patch,
|
||||
0004-firmware-makefile-install-BIOS-blob.patch,
|
||||
0005-libxl-Load-guest-BIOS-from-file.patch,
|
||||
0006-xen-Move-the-hvm_start_info-C-representation-from-li.patch,
|
||||
0007-hvmloader-Grab-the-hvm_start_info-pointer.patch,
|
||||
0008-hvmloader-Locate-the-BIOS-blob.patch,
|
||||
0009-hvmloader-Check-modules-whereabouts-in-perform_tests.patch,
|
||||
0010-hvmloader-Load-SeaBIOS-from-hvm_start_info-modules.patch,
|
||||
0011-hvmloader-Load-OVMF-from-modules.patch,
|
||||
0012-hvmloader-Specific-bios_load-function-required.patch,
|
||||
0013-hvmloader-Always-build-in-SeaBIOS-and-OVMF-loader.patch,
|
||||
0014-configure-do-not-depend-on-SEABIOS_PATH-or-OVMF_PATH.patch
|
||||
- Enable support for UEFI on x86_64 using the ovmf-x86_64-ms.bin
|
||||
firmware from qemu-ovmf-x86_64. The firmware is preloaded with
|
||||
Microsoft keys to more closely resemble firmware on real hardware
|
||||
FATE#320490
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Mar 25 14:46:11 MDT 2016 - carnold@suse.com
|
||||
|
||||
|
@ -11,7 +11,7 @@ Index: xen-4.7.0-testing/tools/libxl/libxl.c
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/libxl/libxl.c
|
||||
+++ xen-4.7.0-testing/tools/libxl/libxl.c
|
||||
@@ -2748,6 +2748,10 @@ static void device_disk_add(libxl__egc *
|
||||
@@ -2773,6 +2773,10 @@ static void device_disk_add(libxl__egc *
|
||||
/* now create a phy device to export the device to the guest */
|
||||
goto do_backend_phy;
|
||||
case LIBXL_DISK_BACKEND_QDISK:
|
||||
@ -26,7 +26,7 @@ Index: xen-4.7.0-testing/tools/libxl/libxl_device.c
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/libxl/libxl_device.c
|
||||
+++ xen-4.7.0-testing/tools/libxl/libxl_device.c
|
||||
@@ -235,7 +235,8 @@ static int disk_try_backend(disk_try_bac
|
||||
@@ -240,7 +240,8 @@ static int disk_try_backend(disk_try_bac
|
||||
return backend;
|
||||
|
||||
case LIBXL_DISK_BACKEND_QDISK:
|
||||
@ -40,8 +40,8 @@ Index: xen-4.7.0-testing/tools/libxl/libxl_dm.c
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/libxl/libxl_dm.c
|
||||
+++ xen-4.7.0-testing/tools/libxl/libxl_dm.c
|
||||
@@ -751,6 +751,30 @@ static int libxl__dm_runas_helper(libxl_
|
||||
}
|
||||
@@ -887,6 +887,30 @@ static char *qemu_disk_ide_drive_string(
|
||||
return drive;
|
||||
}
|
||||
|
||||
+static void libxl__suse_node_to_path(libxl__gc *gc, int domid, const libxl_device_disk *dp, const char **pdev_path)
|
||||
@ -71,43 +71,33 @@ Index: xen-4.7.0-testing/tools/libxl/libxl_dm.c
|
||||
static int libxl__build_device_model_args_new(libxl__gc *gc,
|
||||
const char *dm, int guest_domid,
|
||||
const libxl_domain_config *guest_config,
|
||||
@@ -1169,7 +1193,9 @@ static int libxl__build_device_model_arg
|
||||
@@ -1308,9 +1332,11 @@ static int libxl__build_device_model_arg
|
||||
libxl__device_disk_dev_number(disks[i].vdev, &disk, &part);
|
||||
const char *format = qemu_disk_format_string(disks[i].format);
|
||||
const char *format;
|
||||
char *drive;
|
||||
- const char *pdev_path;
|
||||
+ const char *pdev_path = disks[i].pdev_path;
|
||||
+
|
||||
+ libxl__suse_node_to_path(gc, guest_domid, disks + i, &pdev_path);
|
||||
- const char *target_path = NULL;
|
||||
+ const char *target_path = disks[i].pdev_path;
|
||||
int colo_mode;
|
||||
|
||||
+ libxl__suse_node_to_path(gc, guest_domid, disks + i, &target_path);
|
||||
+
|
||||
if (dev_number == -1) {
|
||||
LOG(WARN, "unable to determine"" disk number for %s",
|
||||
@@ -1185,7 +1211,7 @@ static int libxl__build_device_model_arg
|
||||
disks[i].vdev);
|
||||
@@ -1351,7 +1377,7 @@ static int libxl__build_device_model_arg
|
||||
* the bootloader path.
|
||||
*/
|
||||
if (disks[i].backend == LIBXL_DISK_BACKEND_TAP)
|
||||
- target_path = libxl__blktap_devpath(gc, disks[i].pdev_path,
|
||||
+ target_path = libxl__blktap_devpath(gc, target_path,
|
||||
disks[i].format);
|
||||
else
|
||||
drive = libxl__sprintf
|
||||
(gc, "file=%s,if=ide,index=%d,readonly=%s,media=cdrom,format=%s,cache=writeback,id=ide-%i",
|
||||
- disks[i].pdev_path, disk, disks[i].readwrite ? "off" : "on", format, dev_number);
|
||||
+ pdev_path, disk, disks[i].readwrite ? "off" : "on", format, dev_number);
|
||||
} else {
|
||||
if (disks[i].format == LIBXL_DISK_FORMAT_EMPTY) {
|
||||
LOG(WARN, "cannot support"" empty disk format for %s",
|
||||
@@ -1202,10 +1228,8 @@ static int libxl__build_device_model_arg
|
||||
|
||||
if (disks[i].backend == LIBXL_DISK_BACKEND_TAP) {
|
||||
format = qemu_disk_format_string(LIBXL_DISK_FORMAT_RAW);
|
||||
- pdev_path = libxl__blktap_devpath(gc, disks[i].pdev_path,
|
||||
+ pdev_path = libxl__blktap_devpath(gc, pdev_path,
|
||||
disks[i].format);
|
||||
- } else {
|
||||
- pdev_path = disks[i].pdev_path;
|
||||
}
|
||||
|
||||
/*
|
||||
target_path = libxl__device_disk_find_local_path(gc,
|
||||
Index: xen-4.7.0-testing/tools/libxl/libxlu_disk_l.l
|
||||
===================================================================
|
||||
--- xen-4.7.0-testing.orig/tools/libxl/libxlu_disk_l.l
|
||||
+++ xen-4.7.0-testing/tools/libxl/libxlu_disk_l.l
|
||||
@@ -209,6 +209,8 @@ target=.* { STRIP(','); SAVESTRING("targ
|
||||
@@ -228,6 +228,8 @@ target=.* { STRIP(','); SAVESTRING("targ
|
||||
free(newscript);
|
||||
}
|
||||
|
||||
|
50
xen.spec
50
xen.spec
@ -89,6 +89,10 @@ BuildRequires: libfdt1-devel
|
||||
BuildRequires: dev86
|
||||
%endif
|
||||
#!BuildIgnore: gcc-PIE
|
||||
# JWF: Until Anthony's series to load BIOS via toolstack is merged,
|
||||
# autoconf is needed by autogen.sh.
|
||||
# http://lists.xenproject.org/archives/html/xen-devel/2016-03/msg01626.html
|
||||
BuildRequires: autoconf
|
||||
BuildRequires: bison
|
||||
BuildRequires: fdupes
|
||||
BuildRequires: figlet
|
||||
@ -100,10 +104,6 @@ BuildRequires: libpixman-1-0-devel
|
||||
BuildRequires: libuuid-devel
|
||||
BuildRequires: libxml2-devel
|
||||
BuildRequires: libyajl-devel
|
||||
# JWF: Temporary until we move to Xen 4.7 and Anthony' series to load
|
||||
# firmwares from toolstack
|
||||
# http://lists.xenproject.org/archives/html/xen-devel/2016-03/msg01626.html
|
||||
BuildRequires: qemu-seabios
|
||||
%if %{?with_qemu_traditional}0
|
||||
BuildRequires: SDL-devel
|
||||
BuildRequires: pciutils-devel
|
||||
@ -286,6 +286,22 @@ Patch602: xen.build-compare.man.patch
|
||||
Patch603: ipxe-no-error-logical-not-parentheses.patch
|
||||
Patch604: ipxe-use-rpm-opt-flags.patch
|
||||
Patch605: gcc6-warnings-as-errors.patch
|
||||
# Anthony's "load BIOS via toolstack" patches
|
||||
# http://lists.xenproject.org/archives/html/xen-devel/2016-03/msg01626.html
|
||||
Patch700: 0001-libxc-Rework-extra-module-initialisation.patch
|
||||
Patch701: 0002-libxc-Prepare-a-start-info-structure-for-hvmloader.patch
|
||||
Patch702: 0003-configure-define-SEABIOS_PATH-and-OVMF_PATH.patch
|
||||
Patch703: 0004-firmware-makefile-install-BIOS-blob.patch
|
||||
Patch704: 0005-libxl-Load-guest-BIOS-from-file.patch
|
||||
Patch705: 0006-xen-Move-the-hvm_start_info-C-representation-from-li.patch
|
||||
Patch706: 0007-hvmloader-Grab-the-hvm_start_info-pointer.patch
|
||||
Patch707: 0008-hvmloader-Locate-the-BIOS-blob.patch
|
||||
Patch708: 0009-hvmloader-Check-modules-whereabouts-in-perform_tests.patch
|
||||
Patch709: 0010-hvmloader-Load-SeaBIOS-from-hvm_start_info-modules.patch
|
||||
Patch710: 0011-hvmloader-Load-OVMF-from-modules.patch
|
||||
Patch711: 0012-hvmloader-Specific-bios_load-function-required.patch
|
||||
Patch712: 0013-hvmloader-Always-build-in-SeaBIOS-and-OVMF-loader.patch
|
||||
Patch713: 0014-configure-do-not-depend-on-SEABIOS_PATH-or-OVMF_PATH.patch
|
||||
# Build patches
|
||||
Patch99996: xen.stubdom.newlib.patch
|
||||
Patch99998: tmp_build.patch
|
||||
@ -376,12 +392,12 @@ Requires: bridge-utils
|
||||
%if %suse_version >= 1315
|
||||
Requires: grub2-x86_64-xen
|
||||
%endif
|
||||
Requires: qemu-ovmf-x86_64
|
||||
Requires: qemu-x86
|
||||
%endif
|
||||
%ifarch %arm aarch64
|
||||
Requires: qemu-arm
|
||||
%endif
|
||||
Requires: qemu-seabios
|
||||
Requires: multipath-tools
|
||||
Requires: python
|
||||
Requires: python-curses
|
||||
@ -389,6 +405,7 @@ Requires: python-lxml
|
||||
Requires: python-openssl
|
||||
Requires: python-pam
|
||||
Requires: python-xml
|
||||
Requires: qemu-seabios
|
||||
Requires: xen-libs = %{version}
|
||||
# subpackage existed in 10.3
|
||||
Provides: xen-tools-ioemu = %{version}
|
||||
@ -585,11 +602,31 @@ Authors:
|
||||
%patch603 -p1
|
||||
%patch604 -p1
|
||||
%patch605 -p1
|
||||
# Anthony's "load BIOS via toolstack" patches
|
||||
# http://lists.xenproject.org/archives/html/xen-devel/2016-03/msg01626.html
|
||||
%patch700 -p1
|
||||
%patch701 -p1
|
||||
%patch702 -p1
|
||||
%patch703 -p1
|
||||
%patch704 -p1
|
||||
%patch705 -p1
|
||||
%patch706 -p1
|
||||
%patch707 -p1
|
||||
%patch708 -p1
|
||||
%patch709 -p1
|
||||
%patch710 -p1
|
||||
%patch711 -p1
|
||||
%patch712 -p1
|
||||
%patch713 -p1
|
||||
# Build patches
|
||||
%patch99996 -p1
|
||||
%patch99998 -p1
|
||||
|
||||
%build
|
||||
# JWF: Anthony's series to load BIOS from toolstack requires autogen.sh.
|
||||
# http://lists.xenproject.org/archives/html/xen-devel/2016-03/msg01626.html
|
||||
./autogen.sh
|
||||
|
||||
# we control the version info of this package
|
||||
# to gain control of filename of xen.gz
|
||||
XEN_VERSION=%{version}
|
||||
@ -680,6 +717,7 @@ configure_flags="${configure_flags} --disable-qemu-traditional"
|
||||
%else
|
||||
--disable-systemd \
|
||||
%endif
|
||||
--with-system-ovmf=%{_datadir}/qemu/ovmf-x86_64-ms.bin \
|
||||
--with-system-seabios=%{_datadir}/qemu/bios-256k.bin \
|
||||
--with-system-qemu=%{_bindir}/qemu-system-%{_arch} \
|
||||
${configure_flags}
|
||||
@ -959,6 +997,7 @@ rm -f $RPM_BUILD_ROOT/usr/libexec/qemu-bridge-helper
|
||||
#%endif
|
||||
/usr/bin/xencov_split
|
||||
/usr/bin/xentrace_format
|
||||
/usr/bin/xen-cpuid
|
||||
/usr/sbin/tap*
|
||||
/usr/sbin/xenbaked
|
||||
/usr/sbin/xenconsoled
|
||||
@ -1021,6 +1060,7 @@ rm -f $RPM_BUILD_ROOT/usr/libexec/qemu-bridge-helper
|
||||
/etc/xen/scripts/xen-hotplug-*
|
||||
/etc/xen/scripts/xen-network-common.sh
|
||||
/etc/xen/scripts/xen-script-common.sh
|
||||
/etc/xen/scripts/colo-proxy-setup
|
||||
%{_libexecdir}/xen
|
||||
/var/adm/fillup-templates/sysconfig.pciback
|
||||
/var/adm/fillup-templates/sysconfig.xencommons
|
||||
|
@ -24,10 +24,10 @@ E: xen no-return-in-nonvoid-function ../../../../newlib-1.16.0/libgloss/i386/cyg
|
||||
|
||||
Signed-off-by: Olaf Hering <olaf@aepfle.de>
|
||||
|
||||
Index: xen-4.6.0-testing/stubdom/Makefile
|
||||
Index: xen-4.7.0-testing/stubdom/Makefile
|
||||
===================================================================
|
||||
--- xen-4.6.0-testing.orig/stubdom/Makefile
|
||||
+++ xen-4.6.0-testing/stubdom/Makefile
|
||||
--- xen-4.7.0-testing.orig/stubdom/Makefile
|
||||
+++ xen-4.7.0-testing/stubdom/Makefile
|
||||
@@ -80,6 +80,8 @@ newlib-$(NEWLIB_VERSION): newlib-$(NEWLI
|
||||
patch -d $@ -p0 < newlib.patch
|
||||
patch -d $@ -p0 < newlib-chk.patch
|
||||
@ -37,10 +37,10 @@ Index: xen-4.6.0-testing/stubdom/Makefile
|
||||
find $@ -type f | xargs perl -i.bak \
|
||||
-pe 's/\b_(tzname|daylight|timezone)\b/$$1/g'
|
||||
touch $@
|
||||
Index: xen-4.6.0-testing/stubdom/newlib-cygmon-gmon.patch
|
||||
Index: xen-4.7.0-testing/stubdom/newlib-cygmon-gmon.patch
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ xen-4.6.0-testing/stubdom/newlib-cygmon-gmon.patch
|
||||
+++ xen-4.7.0-testing/stubdom/newlib-cygmon-gmon.patch
|
||||
@@ -0,0 +1,60 @@
|
||||
+
|
||||
+I: A function uses a 'return;' statement, but has actually a value
|
||||
@ -102,10 +102,10 @@ Index: xen-4.6.0-testing/stubdom/newlib-cygmon-gmon.patch
|
||||
+ moncontrol(mode)
|
||||
+ int mode;
|
||||
+ {
|
||||
Index: xen-4.6.0-testing/stubdom/newlib-makedoc.patch
|
||||
Index: xen-4.7.0-testing/stubdom/newlib-makedoc.patch
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ xen-4.6.0-testing/stubdom/newlib-makedoc.patch
|
||||
+++ xen-4.7.0-testing/stubdom/newlib-makedoc.patch
|
||||
@@ -0,0 +1,10 @@
|
||||
+--- newlib-1.16.0/newlib/doc/makedoc.c.orig 2015-04-08 11:56:39.283090914 +0200
|
||||
++++ newlib-1.16.0/newlib/doc/makedoc.c 2015-04-08 11:56:51.245227742 +0200
|
||||
|
@ -9,11 +9,11 @@ what was requested. Kernel cmdline option is prefered over module option.
|
||||
unmodified_drivers/linux-2.6/platform-pci/platform-pci.c | 15 +++++++++++++++
|
||||
1 file changed, 15 insertions(+)
|
||||
|
||||
Index: xen-4.6.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
|
||||
Index: xen-4.7.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
|
||||
===================================================================
|
||||
--- xen-4.6.0-testing.orig/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
|
||||
+++ xen-4.6.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
|
||||
@@ -38,6 +38,9 @@
|
||||
--- xen-4.7.0-testing.orig/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
|
||||
+++ xen-4.7.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
|
||||
@@ -39,6 +39,9 @@
|
||||
#include <xen/interface/hvm/params.h>
|
||||
#include <xen/features.h>
|
||||
#include <xen/evtchn.h>
|
||||
@ -23,7 +23,7 @@ Index: xen-4.6.0-testing/unmodified_drivers/linux-2.6/platform-pci/platform-pci.
|
||||
#ifdef __ia64__
|
||||
#include <asm/xen/xencomm.h>
|
||||
#endif
|
||||
@@ -289,6 +292,18 @@ static int check_platform_magic(struct d
|
||||
@@ -290,6 +293,18 @@ static int check_platform_magic(struct d
|
||||
short magic, unplug = 0;
|
||||
char protocol, *p, *q, *err;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user