28 lines
1.2 KiB
Diff
28 lines
1.2 KiB
Diff
|
# HG changeset patch
|
||
|
# User Malcolm Crossley <malcolm.crossley@citrix.com>
|
||
|
# Date 1335350156 -7200
|
||
|
# Node ID b7ce6a88bebbbd8d03fe50099ede8de4d9adef0f
|
||
|
# Parent 15f094c85c85fb769f72a48b9c5d924a8e455855
|
||
|
x86-64: Fix memory hotplug epfn upper limit test for updating the compat M2P table
|
||
|
|
||
|
The epfn is being compared to (RDWR_COMPAT_MPT_VIRT_END -
|
||
|
RDWR_COMPAT_MPT_VIRT_START) without a 2 bit shift, resulting in the
|
||
|
epfn being compared to the size of the RDWR_COMPAT_MPT table in bytes
|
||
|
instead of the maximum page frame number that the RDWR_COMPAT_MPT
|
||
|
table can map.
|
||
|
|
||
|
Signed-off-by: Malcolm Crossley <malcolm.crossley@citrix.com>
|
||
|
Committed-by: Jan Beulich <jbeulich@suse.com>
|
||
|
|
||
|
--- a/xen/arch/x86/x86_64/mm.c
|
||
|
+++ b/xen/arch/x86/x86_64/mm.c
|
||
|
@@ -451,7 +451,7 @@ static int setup_compat_m2p_table(struct
|
||
|
if ((smap > ((RDWR_COMPAT_MPT_VIRT_END - RDWR_COMPAT_MPT_VIRT_START) >> 2)) )
|
||
|
return 0;
|
||
|
|
||
|
- if (epfn > (RDWR_COMPAT_MPT_VIRT_END - RDWR_COMPAT_MPT_VIRT_START))
|
||
|
+ if ( epfn > ((RDWR_COMPAT_MPT_VIRT_END - RDWR_COMPAT_MPT_VIRT_START) >> 2) )
|
||
|
epfn = (RDWR_COMPAT_MPT_VIRT_END - RDWR_COMPAT_MPT_VIRT_START) >> 2;
|
||
|
|
||
|
emap = ( (epfn + ((1UL << (L2_PAGETABLE_SHIFT - 2)) - 1 )) &
|