# HG changeset patch # User yamahata@xxxxxxxxxxxxx # Date 1181551046 -32400 # Node ID 9296439c575517beb6d51239094d7aa7db126c6e # 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 9296439c5755 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 17:37:26 2007 +0900 @@ -1029,9 +1029,9 @@ p2m_expose_init(void) granule_pfn); p2m_convert_max_pfn = ROUNDUP(p2m_max_low_pfn, granule_pfn); - num_pfn = p2m_convert_max_pfn - p2m_convert_min_pfn; + num_pfn = p2m_convert_max_pfn - p2m_convert_min_pfn + 1; 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; @@ -1049,9 +1049,9 @@ p2m_expose_init(void) p2m_convert_min_pfn = ROUNDDOWN(p2m_min_low_pfn, p2m_granule_pfn); p2m_convert_max_pfn = ROUNDUP(p2m_max_low_pfn, p2m_granule_pfn); - num_pfn = p2m_convert_max_pfn - p2m_convert_min_pfn; + num_pfn = p2m_convert_max_pfn - p2m_convert_min_pfn + 1; 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();