mirror of
https://github.com/torvalds/linux.git
synced 2024-12-07 11:31:41 +00:00
x86/hyperv: Remove BUG_ON() for kmap_local_page()
The commit 154fb14df7
("x86/hyperv: Replace kmap() with
kmap_local_page()") keeps the BUG_ON() to check if kmap_local_page()
fails.
But in fact, kmap_local_page() always returns a valid kernel address
and won't return NULL here. It will BUG on its own if it fails. [1]
So directly use memcpy_to_page() which creates local mapping to copy.
[1]: https://lore.kernel.org/lkml/YztFEyUA48et0yTt@iweiny-mobl/
Suggested-by: Fabio M. De Francesco <fmdefrancesco@gmail.com>
Suggested-by: Ira Weiny <ira.weiny@intel.com>
Reviewed-by: Ira Weiny <ira.weiny@intel.com>
Signed-off-by: Zhao Liu <zhao1.liu@intel.com>
Link: https://lore.kernel.org/r/20221020083820.2341088-1-zhao1.liu@linux.intel.com
Signed-off-by: Wei Liu <wei.liu@kernel.org>
This commit is contained in:
parent
247f34f7b8
commit
03b9a6e18d
@ -444,7 +444,7 @@ void __init hyperv_init(void)
|
||||
|
||||
if (hv_root_partition) {
|
||||
struct page *pg;
|
||||
void *src, *dst;
|
||||
void *src;
|
||||
|
||||
/*
|
||||
* For the root partition, the hypervisor will set up its
|
||||
@ -459,13 +459,11 @@ void __init hyperv_init(void)
|
||||
wrmsrl(HV_X64_MSR_HYPERCALL, hypercall_msr.as_uint64);
|
||||
|
||||
pg = vmalloc_to_page(hv_hypercall_pg);
|
||||
dst = kmap_local_page(pg);
|
||||
src = memremap(hypercall_msr.guest_physical_address << PAGE_SHIFT, PAGE_SIZE,
|
||||
MEMREMAP_WB);
|
||||
BUG_ON(!(src && dst));
|
||||
memcpy(dst, src, HV_HYP_PAGE_SIZE);
|
||||
BUG_ON(!src);
|
||||
memcpy_to_page(pg, 0, src, HV_HYP_PAGE_SIZE);
|
||||
memunmap(src);
|
||||
kunmap_local(dst);
|
||||
} else {
|
||||
hypercall_msr.guest_physical_address = vmalloc_to_pfn(hv_hypercall_pg);
|
||||
wrmsrl(HV_X64_MSR_HYPERCALL, hypercall_msr.as_uint64);
|
||||
|
Loading…
Reference in New Issue
Block a user