# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1206014852 0
# Node ID 7e88517401411cbf443350f4a0b8a83b4ebc9218
# Parent e1f7a993fa696310a7dbd02f236cd6e89d94e2fa
x86 numa: Fix the overflow of physical addresses.
If memory address >4G, the address will overflow in some NUMA code if
using unsigned long to statement a physical address in PAE arch.
Replace "unsigned long" with paddr_t to avoid overflow.
Signed-off-by: Duan Ronghui <ronghui.duan@xxxxxxxxx>
xen-unstable changeset: 17201:f82baf1755ac6b4e1b77a35f160d26d30a094a1c
xen-unstable date: Mon Mar 17 11:18:06 2008 +0000
---
xen/arch/x86/numa.c | 6 +++---
xen/include/asm-x86/numa.h | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff -r e1f7a993fa69 -r 7e8851740141 xen/arch/x86/numa.c
--- a/xen/arch/x86/numa.c Thu Mar 20 12:07:08 2008 +0000
+++ b/xen/arch/x86/numa.c Thu Mar 20 12:07:32 2008 +0000
@@ -57,7 +57,7 @@ populate_memnodemap(const struct node *n
{
int i;
int res = -1;
- unsigned long addr, end;
+ paddr_t addr, end;
if (shift >= 64)
return -1;
@@ -286,13 +286,13 @@ static void dump_numa(unsigned char key)
(u32)(now>>32), (u32)now);
for_each_online_node(i) {
- unsigned long pa = (NODE_DATA(i)->node_start_pfn + 1)<<
PAGE_SHIFT;
+ paddr_t pa = (NODE_DATA(i)->node_start_pfn + 1)<< PAGE_SHIFT;
printk("idx%d -> NODE%d start->%lu size->%lu\n",
i, NODE_DATA(i)->node_id,
NODE_DATA(i)->node_start_pfn,
NODE_DATA(i)->node_spanned_pages);
/* sanity check phys_to_nid() */
- printk("phys_to_nid(%lx) -> %d should be %d\n", pa,
phys_to_nid(pa),
+ printk("phys_to_nid(%"PRIpaddr") -> %d should be %d\n", pa,
phys_to_nid(pa),
NODE_DATA(i)->node_id);
}
for_each_online_cpu(i)
diff -r e1f7a993fa69 -r 7e8851740141 xen/include/asm-x86/numa.h
--- a/xen/include/asm-x86/numa.h Thu Mar 20 12:07:08 2008 +0000
+++ b/xen/include/asm-x86/numa.h Thu Mar 20 12:07:32 2008 +0000
@@ -52,7 +52,7 @@ struct node_data {
extern struct node_data node_data[];
-static inline __attribute__((pure)) int phys_to_nid(unsigned long addr)
+static inline __attribute__((pure)) int phys_to_nid(paddr_t addr)
{
unsigned nid;
VIRTUAL_BUG_ON((addr >> memnode_shift) >= NODEMAPSIZE);
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|