[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] 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#master
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |