# HG changeset patch # User yamahata@xxxxxxxxxxxxx # Date 1181555089 -32400 # Node ID 4785a7fd5dec8d44fd087c91b4d23d91aeb75b20 # Parent 7305e027b17dc3123bbbcf015d43b904f38c959a fix off-by-one bug in p2m_expose_init PATCHNAME: fix_off_by_one_p2m_expose_init Signed-off-by: Isaku Yamahata diff -r 7305e027b17d -r 4785a7fd5dec linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c --- a/linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c Fri Jun 08 23:46:51 2007 +0900 +++ b/linux-2.6-xen-sparse/arch/ia64/xen/hypervisor.c Mon Jun 11 18:44:49 2007 +0900 @@ -1031,7 +1031,7 @@ p2m_expose_init(void) granule_pfn); num_pfn = p2m_convert_max_pfn - p2m_convert_min_pfn; p2m_expose_size = num_pfn << PAGE_SHIFT; - p2m_size = num_pfn / PTRS_PER_PTE; + p2m_size = (num_pfn + PTRS_PER_PTE - 1) / PTRS_PER_PTE; p2m_size = ROUNDUP(p2m_size, granule_pfn << PAGE_SHIFT); if (p2m_size == page_size) break; @@ -1051,7 +1051,7 @@ p2m_expose_init(void) p2m_convert_max_pfn = ROUNDUP(p2m_max_low_pfn, p2m_granule_pfn); num_pfn = p2m_convert_max_pfn - p2m_convert_min_pfn; p2m_expose_size = num_pfn << PAGE_SHIFT; - p2m_size = num_pfn / PTRS_PER_PTE; + p2m_size = (num_pfn + PTRS_PER_PTE - 1) / PTRS_PER_PTE; p2m_size = ROUNDUP(p2m_size, p2m_granule_pfn << PAGE_SHIFT); align = max(privcmd_resource_align, p2m_granule_pfn << PAGE_SHIFT); @@ -1064,7 +1064,7 @@ p2m_expose_init(void) if (error) { printk(KERN_ERR P2M_PREFIX "can't allocate region for p2m exposure " - "[0x%016lx, 0x%016lx) 0x%016lx\n", + "[0x%016lx, 0x%016lx] 0x%016lx\n", p2m_convert_min_pfn, p2m_convert_max_pfn, p2m_size); goto out; } @@ -1102,10 +1102,10 @@ p2m_expose_init(void) p2m_initialized = 1; printk(P2M_PREFIX "assign p2m table of [0x%016lx, 0x%016lx)\n", p2m_convert_min_pfn << PAGE_SHIFT, - p2m_convert_max_pfn << PAGE_SHIFT); + (p2m_convert_max_pfn << PAGE_SHIFT) + PAGE_SIZE); printk(P2M_PREFIX "to [0x%016lx, 0x%016lx) (%ld KBytes)\n", p2m_assign_start_pfn << PAGE_SHIFT, - p2m_assign_end_pfn << PAGE_SHIFT, + (p2m_assign_end_pfn << PAGE_SHIFT) + PAGE_SIZE, p2m_size / 1024); out: unlock_cpu_hotplug();