]> git.proxmox.com Git - grub2.git/blob - debian/patches/xen-pvh-rearrange-init.patch
grub2 (2.02+dfsg1-20) unstable; urgency=medium
[grub2.git] / debian / patches / xen-pvh-rearrange-init.patch
1 From 731bd3bb833435ff2b5e2730769fcfd53b622a8d Mon Sep 17 00:00:00 2001
2 From: Juergen Gross <jgross@suse.com>
3 Date: Fri, 7 Dec 2018 13:11:34 +0100
4 Subject: xen: Rearrange xen/init.c to prepare it for Xen PVH mode
5
6 Rearrange grub-core/kern/xen/init.c to prepare adding PVH mode support
7 to it. This includes putting some code under #ifdef GRUB_MACHINE_XEN
8 as it will not be used when running as PVH.
9
10 Signed-off-by: Juergen Gross <jgross@suse.com>
11 Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
12 Tested-by: Hans van Kranenburg <hans@knorrie.org>
13
14 Origin: upstream, https://git.savannah.gnu.org/cgit/grub.git/commit/?id=bec9edf53f4d0b629a52a7d1145f38f88df8dd1d
15 Bug-Debian: https://bugs.debian.org/776450
16 Last-Update: 2019-01-07
17
18 Patch-Name: xen-pvh-rearrange-init.patch
19 ---
20 grub-core/kern/xen/init.c | 60 ++++++++++++++++++++++-----------------
21 1 file changed, 34 insertions(+), 26 deletions(-)
22
23 diff --git a/grub-core/kern/xen/init.c b/grub-core/kern/xen/init.c
24 index 29f5bc23d..10007b411 100644
25 --- a/grub-core/kern/xen/init.c
26 +++ b/grub-core/kern/xen/init.c
27 @@ -41,9 +41,11 @@ grub_size_t grub_xen_n_allocated_shared_pages;
28 static grub_xen_mfn_t
29 grub_xen_ptr2mfn (void *ptr)
30 {
31 +#ifdef GRUB_MACHINE_XEN
32 grub_xen_mfn_t *mfn_list =
33 (grub_xen_mfn_t *) grub_xen_start_page_addr->mfn_list;
34 return mfn_list[(grub_addr_t) ptr >> GRUB_XEN_LOG_PAGE_SIZE];
35 +#endif
36 }
37
38 void *
39 @@ -104,18 +106,6 @@ grub_machine_get_bootlocation (char **device __attribute__ ((unused)),
40 {
41 }
42
43 -static grub_uint8_t window[GRUB_XEN_PAGE_SIZE]
44 - __attribute__ ((aligned (GRUB_XEN_PAGE_SIZE)));
45 -
46 -#ifdef __x86_64__
47 -#define NUMBER_OF_LEVELS 4
48 -#else
49 -#define NUMBER_OF_LEVELS 3
50 -#endif
51 -
52 -#define LOG_POINTERS_PER_PAGE 9
53 -#define POINTERS_PER_PAGE (1 << LOG_POINTERS_PER_PAGE)
54 -
55 void
56 grub_xen_store_send (const void *buf_, grub_size_t len)
57 {
58 @@ -337,6 +327,19 @@ grub_xen_setup_gnttab (void)
59 grub_xen_grant_table_op (GNTTABOP_setup_table, &gnttab_setup, 1);
60 }
61
62 +#ifdef GRUB_MACHINE_XEN
63 +static grub_uint8_t window[GRUB_XEN_PAGE_SIZE]
64 + __attribute__ ((aligned (GRUB_XEN_PAGE_SIZE)));
65 +
66 +#ifdef __x86_64__
67 +#define NUMBER_OF_LEVELS 4
68 +#else
69 +#define NUMBER_OF_LEVELS 3
70 +#endif
71 +
72 +#define LOG_POINTERS_PER_PAGE 9
73 +#define POINTERS_PER_PAGE (1 << LOG_POINTERS_PER_PAGE)
74 +
75 #define MAX_N_UNUSABLE_PAGES 4
76
77 static int
78 @@ -529,13 +532,30 @@ map_all_pages (void)
79 grub_mm_init_region ((void *) heap_start, heap_end - heap_start);
80 }
81
82 +grub_err_t
83 +grub_machine_mmap_iterate (grub_memory_hook_t hook, void *hook_data)
84 +{
85 + grub_uint64_t total_pages = grub_xen_start_page_addr->nr_pages;
86 + grub_uint64_t usable_pages = grub_xen_start_page_addr->pt_base >> 12;
87 + if (hook (0, page2offset (usable_pages), GRUB_MEMORY_AVAILABLE, hook_data))
88 + return GRUB_ERR_NONE;
89 +
90 + hook (page2offset (usable_pages), page2offset (total_pages - usable_pages),
91 + GRUB_MEMORY_RESERVED, hook_data);
92 +
93 + return GRUB_ERR_NONE;
94 +}
95 +#endif
96 +
97 extern char _end[];
98
99 void
100 grub_machine_init (void)
101 {
102 +#ifdef GRUB_MACHINE_XEN
103 #ifdef __i386__
104 grub_xen_vm_assist (VMASST_CMD_enable, VMASST_TYPE_pae_extended_cr3);
105 +#endif
106 #endif
107
108 grub_modbase = ALIGN_UP ((grub_addr_t) _end
109 @@ -544,7 +564,9 @@ grub_machine_init (void)
110
111 grub_xen_setup_gnttab ();
112
113 +#ifdef GRUB_MACHINE_XEN
114 map_all_pages ();
115 +#endif
116
117 grub_console_init ();
118
119 @@ -571,17 +593,3 @@ grub_machine_fini (int flags __attribute__ ((unused)))
120 grub_xendisk_fini ();
121 grub_boot_fini ();
122 }
123 -
124 -grub_err_t
125 -grub_machine_mmap_iterate (grub_memory_hook_t hook, void *hook_data)
126 -{
127 - grub_uint64_t total_pages = grub_xen_start_page_addr->nr_pages;
128 - grub_uint64_t usable_pages = grub_xen_start_page_addr->pt_base >> 12;
129 - if (hook (0, page2offset (usable_pages), GRUB_MEMORY_AVAILABLE, hook_data))
130 - return GRUB_ERR_NONE;
131 -
132 - hook (page2offset (usable_pages), page2offset (total_pages - usable_pages),
133 - GRUB_MEMORY_RESERVED, hook_data);
134 -
135 - return GRUB_ERR_NONE;
136 -}