|   | 
      | 
  
  
      | 
      | 
  
 
     | 
    | 
  
  
     | 
    | 
  
  
    |   | 
      | 
  
  
    | 
         
xen-changelog
[Xen-changelog] [xen-unstable] x86/numa: fix c/s 20120 (Fix SRAT	check f
 
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1251709817 -3600
# Node ID 27b3bd0a47fd8b020ce06567658237f3d25227f9
# Parent  cf95641ba1d0a6a868f161a45a48f8aac9dd54d3
x86/numa: fix c/s 20120 (Fix SRAT check for discontig memory)
That change converted the (wrong) assumption of contiguous nodes'
memory to a similarly wrong one of assuming discontiguous memory (i.e.
each node having separate E820 table entries). The code ought to be
able to deal with both, though, and I hope this change makes it so.
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>
Acked-by: Alex Williamson <alex.williamson@xxxxxx>
---
 xen/arch/x86/srat.c |   26 +++++++++++++++++---------
 1 files changed, 17 insertions(+), 9 deletions(-)
diff -r cf95641ba1d0 -r 27b3bd0a47fd xen/arch/x86/srat.c
--- a/xen/arch/x86/srat.c       Mon Aug 31 10:09:12 2009 +0100
+++ b/xen/arch/x86/srat.c       Mon Aug 31 10:10:17 2009 +0100
@@ -249,15 +249,23 @@ static int nodes_cover_memory(void)
                start = e820.map[i].addr;
                end = e820.map[i].addr + e820.map[i].size - 1;
 
-               found = 0;
-               for_each_node_mask(j, nodes_parsed) {
-                       if (start >= nodes[j].start && end <= nodes[j].end) {
-                               found = 1;
-                               break;
-                       }
-               }
-
-               if (!found) {
+               do {
+                       found = 0;
+                       for_each_node_mask(j, nodes_parsed)
+                               if (start < nodes[j].end
+                                   && end > nodes[j].start) {
+                                       if (start >= nodes[j].start) {
+                                               start = nodes[j].end;
+                                               found = 1;
+                                       }
+                                       if (end <= nodes[j].end) {
+                                               end = nodes[j].start;
+                                               found = 1;
+                                       }
+                               }
+               } while (found && start < end);
+
+               if (start < end) {
                        printk(KERN_ERR "SRAT: No PXM for e820 range: "
                                "%016Lx - %016Lx\n", start, end);
                        return 0;
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
 |   
 
| <Prev in Thread] | 
Current Thread | 
[Next in Thread> |  
- [Xen-changelog] [xen-unstable] x86/numa: fix c/s 20120 (Fix SRAT	check for discontig memory),
Xen patchbot-unstable <=
  
 |  
  
 | 
    | 
  
  
    |   | 
    |