|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH RFC v1 45/74] x86/guest: use unpopulated memory to map the shared_info page
This prevents hardcoding a known unpopulated memory page to map
the shared info page. This fixes a TODO item in a previous patch.
Remove hypervisor_early_setup as now it is not required anymore.
Signed-off-by: Roger Pau Monne <roger.pau@xxxxxxxxxx>
Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx>
---
xen/arch/x86/guest/xen.c | 20 ++++++++------------
xen/arch/x86/setup.c | 3 ---
xen/include/asm-x86/guest/xen.h | 5 -----
3 files changed, 8 insertions(+), 20 deletions(-)
diff --git a/xen/arch/x86/guest/xen.c b/xen/arch/x86/guest/xen.c
index f66c10fbe5..0a4c02a8cd 100644
--- a/xen/arch/x86/guest/xen.c
+++ b/xen/arch/x86/guest/xen.c
@@ -77,23 +77,22 @@ void __init probe_hypervisor(void)
xen_guest = true;
}
-static void map_shared_info(struct e820map *e820)
+static void map_shared_info(void)
{
- paddr_t frame = 0xff000000; /* TODO: Hardcoded beside magic frames. */
+ mfn_t mfn;
struct xen_add_to_physmap xatp = {
.domid = DOMID_SELF,
- .idx = 0,
.space = XENMAPSPACE_shared_info,
- .gpfn = frame >> PAGE_SHIFT,
};
- if ( !e820_add_range(e820, frame, frame + PAGE_SIZE, E820_RESERVED) )
- panic("Failed to reserve shared_info range");
+ if ( hypervisor_alloc_unused_page(&mfn) )
+ panic("unable to reserve shared info memory page");
+ xatp.gpfn = mfn_x(mfn);
if ( xen_hypercall_memory_op(XENMEM_add_to_physmap, &xatp) )
panic("Failed to map shared_info page");
- set_fixmap(FIX_XEN_SHARED_INFO, frame);
+ set_fixmap(FIX_XEN_SHARED_INFO, mfn_x(mfn) << PAGE_SHIFT);
}
static void xen_evtchn_upcall(struct cpu_user_regs *regs)
@@ -187,15 +186,12 @@ static void __init init_memmap(void)
}
}
-void __init hypervisor_early_setup(struct e820map *e820)
-{
- map_shared_info(e820);
-}
-
void __init hypervisor_setup(void)
{
init_memmap();
+ map_shared_info();
+
init_evtchn();
}
diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c
index 1b3576bc7d..9b45a4fd94 100644
--- a/xen/arch/x86/setup.c
+++ b/xen/arch/x86/setup.c
@@ -898,9 +898,6 @@ void __init noreturn __start_xen(unsigned long mbi_p)
/* Create a temporary copy of the E820 map. */
memcpy(&boot_e820, &e820, sizeof(e820));
- if ( xen_guest )
- hypervisor_early_setup(&boot_e820);
-
/* Early kexec reservation (explicit static start address). */
nr_pages = 0;
for ( i = 0; i < e820.nr_map; i++ )
diff --git a/xen/include/asm-x86/guest/xen.h b/xen/include/asm-x86/guest/xen.h
index ba826d75db..7a4d734795 100644
--- a/xen/include/asm-x86/guest/xen.h
+++ b/xen/include/asm-x86/guest/xen.h
@@ -31,7 +31,6 @@
extern bool xen_guest;
void probe_hypervisor(void);
-void hypervisor_early_setup(struct e820map *e820);
void hypervisor_setup(void);
void hypervisor_ap_setup(void);
int hypervisor_alloc_unused_page(mfn_t *mfn);
@@ -42,10 +41,6 @@ int hypervisor_free_unused_page(mfn_t mfn);
#define xen_guest 0
static inline void probe_hypervisor(void) {};
-static inline void hypervisor_early_setup(struct e820map *e820)
-{
- ASSERT_UNREACHABLE();
-};
static inline void hypervisor_setup(void)
{
--
2.11.0
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |