|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] x86/boot: Convert move_memory() to use bootstrap_map_addr()
commit e33e18df05d8238c09fff9c9dcaafe273989c57f
Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
AuthorDate: Tue Oct 22 18:33:57 2024 +0100
Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CommitDate: Wed Oct 23 10:27:36 2024 +0100
x86/boot: Convert move_memory() to use bootstrap_map_addr()
move_memory() is very complicated, and buggy. In order to fix the latter,
we
have to address the former.
Given prior cleanup, bootstrap_map() is now implemented in terms of
bootstrap_map_addr(), meaning that it is counterproductive to plumb the
mapping through module_t.
Delete mod, and introduce two same-sized/named fields. At this point in
boot,
neither fields have their named purpose, so indicate the purpose in
comments.
No functional change.
Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Reviewed-by: Daniel P. Smith <dpsmith@xxxxxxxxxxxxxxxxxxxx>
---
xen/arch/x86/setup.c | 35 +++++++++++++++++++----------------
1 file changed, 19 insertions(+), 16 deletions(-)
diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c
index 20392c2abf..1199df988d 100644
--- a/xen/arch/x86/setup.c
+++ b/xen/arch/x86/setup.c
@@ -492,26 +492,29 @@ static void __init move_memory(
while ( size )
{
- module_t mod;
+ unsigned int start /* frame */;
+ unsigned int end /* mapsz */;
unsigned int soffs = src & mask;
unsigned int doffs = dst & mask;
unsigned int sz;
void *d, *s;
- mod.mod_start = (src - soffs) >> PAGE_SHIFT;
- mod.mod_end = soffs + size;
- if ( mod.mod_end > blksz )
- mod.mod_end = blksz;
- sz = mod.mod_end - soffs;
- s = bootstrap_map(&mod);
-
- mod.mod_start = (dst - doffs) >> PAGE_SHIFT;
- mod.mod_end = doffs + size;
- if ( mod.mod_end > blksz )
- mod.mod_end = blksz;
- if ( sz > mod.mod_end - doffs )
- sz = mod.mod_end - doffs;
- d = bootstrap_map(&mod);
+ start = (src - soffs) >> PAGE_SHIFT;
+ end = soffs + size;
+ if ( end > blksz )
+ end = blksz;
+ sz = end - soffs;
+ s = bootstrap_map_addr(pfn_to_paddr(start),
+ pfn_to_paddr(start) + end);
+
+ start = (dst - doffs) >> PAGE_SHIFT;
+ end = doffs + size;
+ if ( end > blksz )
+ end = blksz;
+ if ( sz > end - doffs )
+ sz = end - doffs;
+ d = bootstrap_map_addr(pfn_to_paddr(start),
+ pfn_to_paddr(start) + end);
memmove(d + doffs, s + soffs, sz);
@@ -519,7 +522,7 @@ static void __init move_memory(
src += sz;
size -= sz;
- bootstrap_map(NULL);
+ bootstrap_map_addr(0, 0);
}
}
--
generated by git-patchbot for /home/xen/git/xen.git#staging
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |