From: Malcolm Crossley Date: Tue, 1 May 2012 13:16:31 +0000 (+0100) Subject: x86-64: Fix memory hotplug epfn upper limit test for updating the X-Git-Tag: 4.0.4-rc1~2 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=b8d623e62afdf7d9ecfe98659dc9d004f983c6f8;p=xen.git 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 Committed-by: Jan Beulich xen-unstable changeset: 25242:b7ce6a88bebb xen-unstable date: Wed Apr 25 12:35:56 2012 +0200 --- diff --git a/xen/arch/x86/x86_64/mm.c b/xen/arch/x86/x86_64/mm.c index b980d62287..862f79e2ef 100644 --- a/xen/arch/x86/x86_64/mm.c +++ b/xen/arch/x86/x86_64/mm.c @@ -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 )) &