diff options
author | Henrik Riomar <henrik.riomar@gmail.com> | 2019-04-03 16:07:12 +0200 |
---|---|---|
committer | Leonardo Arena <rnalrd@alpinelinux.org> | 2019-04-05 06:53:00 +0000 |
commit | c40e9ceff34231100ff228d3015900e945727a7f (patch) | |
tree | c1960c097ca33cac4b1718485144cd5603f6b96a /main/grub/0009-xen-Add-basic-hooks-for-PVH-in-current-code.patch | |
parent | 311f3a86010da63e189043d072f745b478b45309 (diff) | |
download | aports-c40e9ceff34231100ff228d3015900e945727a7f.tar.bz2 aports-c40e9ceff34231100ff228d3015900e945727a7f.tar.xz |
main/grub: add xen pvh support
* Backport xen_pvh patches from grub master branch
* Adds grub-i386-xen_pvh.bin to the grub-xenhost package
Diffstat (limited to 'main/grub/0009-xen-Add-basic-hooks-for-PVH-in-current-code.patch')
-rw-r--r-- | main/grub/0009-xen-Add-basic-hooks-for-PVH-in-current-code.patch | 267 |
1 files changed, 267 insertions, 0 deletions
diff --git a/main/grub/0009-xen-Add-basic-hooks-for-PVH-in-current-code.patch b/main/grub/0009-xen-Add-basic-hooks-for-PVH-in-current-code.patch new file mode 100644 index 0000000000..2c663bc551 --- /dev/null +++ b/main/grub/0009-xen-Add-basic-hooks-for-PVH-in-current-code.patch @@ -0,0 +1,267 @@ +From 6f19a6f001e182b9716ea850ce39bb2545c558cb Mon Sep 17 00:00:00 2001 +From: Juergen Gross <jgross@suse.com> +Date: Fri, 7 Dec 2018 13:11:37 +0100 +Subject: [PATCH 09/20] xen: Add basic hooks for PVH in current code + +Add the hooks to current code needed for Xen PVH. They will be filled +with code later when the related functionality is being added. + +loader/i386/linux.c needs to include machine/kernel.h now as it needs +to get GRUB_KERNEL_USE_RSDP_ADDR from there. This in turn requires to +add an empty kernel.h header for some i386 platforms (efi, coreboot, +ieee1275, xen) and for x86_64 efi. + +Signed-off-by: Juergen Gross <jgross@suse.com> +Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com> +Tested-by: Hans van Kranenburg <hans@knorrie.org> +(cherry picked from commit 0b3e4eb2d2e1875e6045e838962f769f2ce161dd) +--- + grub-core/Makefile.am | 6 +++++ + grub-core/kern/i386/xen/pvh.c | 37 +++++++++++++++++++++++++++ + grub-core/kern/i386/xen/startup_pvh.S | 29 +++++++++++++++++++++ + grub-core/kern/xen/init.c | 4 +++ + grub-core/loader/i386/linux.c | 1 + + include/grub/i386/coreboot/kernel.h | 0 + include/grub/i386/efi/kernel.h | 0 + include/grub/i386/ieee1275/kernel.h | 0 + include/grub/i386/xen/kernel.h | 0 + include/grub/i386/xen_pvh/kernel.h | 30 ++++++++++++++++++++++ + include/grub/x86_64/efi/kernel.h | 0 + include/grub/xen.h | 5 ++++ + 12 files changed, 112 insertions(+) + create mode 100644 grub-core/kern/i386/xen/pvh.c + create mode 100644 grub-core/kern/i386/xen/startup_pvh.S + create mode 100644 include/grub/i386/coreboot/kernel.h + create mode 100644 include/grub/i386/efi/kernel.h + create mode 100644 include/grub/i386/ieee1275/kernel.h + create mode 100644 include/grub/i386/xen/kernel.h + create mode 100644 include/grub/i386/xen_pvh/kernel.h + create mode 100644 include/grub/x86_64/efi/kernel.h + +diff --git a/grub-core/Makefile.am b/grub-core/Makefile.am +index 04e9395fd..e36c109e2 100644 +--- a/grub-core/Makefile.am ++++ b/grub-core/Makefile.am +@@ -102,6 +102,7 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h + endif + + if COND_i386_efi ++KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h +@@ -111,6 +112,7 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/pmtimer.h + endif + + if COND_i386_coreboot ++KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/coreboot/lbio.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video.h +@@ -122,6 +124,7 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h + endif + + if COND_i386_multiboot ++KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h + endif +@@ -132,6 +135,7 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h + endif + + if COND_i386_ieee1275 ++KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/ieee1275/ieee1275.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h +@@ -140,6 +144,7 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h + endif + + if COND_i386_xen ++KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/xen.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/xen/hypercall.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h +@@ -158,6 +163,7 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h + endif + + if COND_x86_64_efi ++KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h + KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h +diff --git a/grub-core/kern/i386/xen/pvh.c b/grub-core/kern/i386/xen/pvh.c +new file mode 100644 +index 000000000..4f629b15e +--- /dev/null ++++ b/grub-core/kern/i386/xen/pvh.c +@@ -0,0 +1,37 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2018 Free Software Foundation, Inc. ++ * ++ * GRUB is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, either version 3 of the License, or ++ * (at your option) any later version. ++ * ++ * GRUB is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with GRUB. If not, see <http://www.gnu.org/licenses/>. ++ */ ++ ++#include <grub/kernel.h> ++#include <grub/misc.h> ++#include <grub/memory.h> ++#include <grub/mm.h> ++#include <grub/xen.h> ++#include <xen/hvm/start_info.h> ++#include <grub/machine/kernel.h> ++ ++grub_uint64_t grub_rsdp_addr; ++ ++void ++grub_xen_setup_pvh (void) ++{ ++} ++ ++grub_err_t ++grub_machine_mmap_iterate (grub_memory_hook_t hook, void *hook_data) ++{ ++} +diff --git a/grub-core/kern/i386/xen/startup_pvh.S b/grub-core/kern/i386/xen/startup_pvh.S +new file mode 100644 +index 000000000..69b8fdcca +--- /dev/null ++++ b/grub-core/kern/i386/xen/startup_pvh.S +@@ -0,0 +1,29 @@ ++/* startup.S - bootstrap GRUB itself */ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2018 Free Software Foundation, Inc. ++ * ++ * GRUB is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, either version 3 of the License, or ++ * (at your option) any later version. ++ * ++ * GRUB is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with GRUB. If not, see <http://www.gnu.org/licenses/>. ++ */ ++ ++#include <config.h> ++#include <grub/symbol.h> ++ ++ .file "startup_pvh.S" ++ .text ++ ++/* Saved pointer to start info structure. */ ++ .globl pvh_start_info ++pvh_start_info: ++ .long 0 +diff --git a/grub-core/kern/xen/init.c b/grub-core/kern/xen/init.c +index a23dad633..782ca7295 100644 +--- a/grub-core/kern/xen/init.c ++++ b/grub-core/kern/xen/init.c +@@ -564,6 +564,10 @@ grub_machine_init (void) + + GRUB_KERNEL_MACHINE_MOD_GAP, + GRUB_KERNEL_MACHINE_MOD_ALIGN); + ++#ifdef GRUB_MACHINE_XEN_PVH ++ grub_xen_setup_pvh (); ++#endif ++ + grub_xen_setup_gnttab (); + + #ifdef GRUB_MACHINE_XEN +diff --git a/grub-core/loader/i386/linux.c b/grub-core/loader/i386/linux.c +index 7d6d5d499..e0825cb21 100644 +--- a/grub-core/loader/i386/linux.c ++++ b/grub-core/loader/i386/linux.c +@@ -35,6 +35,7 @@ + #include <grub/i18n.h> + #include <grub/lib/cmdline.h> + #include <grub/linux.h> ++#include <grub/machine/kernel.h> + + GRUB_MOD_LICENSE ("GPLv3+"); + +diff --git a/include/grub/i386/coreboot/kernel.h b/include/grub/i386/coreboot/kernel.h +new file mode 100644 +index 000000000..e69de29bb +diff --git a/include/grub/i386/efi/kernel.h b/include/grub/i386/efi/kernel.h +new file mode 100644 +index 000000000..e69de29bb +diff --git a/include/grub/i386/ieee1275/kernel.h b/include/grub/i386/ieee1275/kernel.h +new file mode 100644 +index 000000000..e69de29bb +diff --git a/include/grub/i386/xen/kernel.h b/include/grub/i386/xen/kernel.h +new file mode 100644 +index 000000000..e69de29bb +diff --git a/include/grub/i386/xen_pvh/kernel.h b/include/grub/i386/xen_pvh/kernel.h +new file mode 100644 +index 000000000..2b7b8a129 +--- /dev/null ++++ b/include/grub/i386/xen_pvh/kernel.h +@@ -0,0 +1,30 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2018 Free Software Foundation, Inc. ++ * ++ * GRUB is free software: you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation, either version 3 of the License, or ++ * (at your option) any later version. ++ * ++ * GRUB is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with GRUB. If not, see <http://www.gnu.org/licenses/>. ++ */ ++ ++#ifndef GRUB_KERNEL_MACHINE_HEADER ++#define GRUB_KERNEL_MACHINE_HEADER 1 ++ ++#ifndef ASM_FILE ++ ++#define GRUB_KERNEL_USE_RSDP_ADDR 1 ++ ++extern grub_uint64_t EXPORT_VAR(grub_rsdp_addr); ++ ++#endif /* ! ASM_FILE */ ++ ++#endif /* GRUB_KERNEL_MACHINE_HEADER */ +diff --git a/include/grub/x86_64/efi/kernel.h b/include/grub/x86_64/efi/kernel.h +new file mode 100644 +index 000000000..e69de29bb +diff --git a/include/grub/xen.h b/include/grub/xen.h +index c31cc10c7..91cb7cf81 100644 +--- a/include/grub/xen.h ++++ b/include/grub/xen.h +@@ -95,6 +95,11 @@ typedef grub_uint64_t grub_xen_mfn_t; + typedef grub_uint32_t grub_xen_mfn_t; + #endif + typedef unsigned int grub_xen_evtchn_t; ++ ++#ifdef GRUB_MACHINE_XEN_PVH ++extern struct hvm_start_info *pvh_start_info; ++void grub_xen_setup_pvh (void); ++#endif + #endif + + #endif +-- +2.21.0 + |