]> xenbits.xensource.com Git - xen.git/commitdiff
x86-64: Fix memory hotplug epfn upper limit test for updating the
authorMalcolm Crossley <malcolm.crossley@citrix.com>
Tue, 1 May 2012 13:16:31 +0000 (14:16 +0100)
committerMalcolm Crossley <malcolm.crossley@citrix.com>
Tue, 1 May 2012 13:16:31 +0000 (14:16 +0100)
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>
xen-unstable changeset:   25242:b7ce6a88bebb
xen-unstable date:        Wed Apr 25 12:35:56 2012 +0200

xen/arch/x86/x86_64/mm.c

index b980d6228792863a28679c85c5084d64213cb5a8..862f79e2ef33c954b50bd0d7e687400c045f2285 100644 (file)
@@ -446,7 +446,7 @@ static int setup_compat_m2p_table(struct mem_hotadd_info *info)
     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 )) &