[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [v9][PATCH 07/16] hvmloader/e820: construct guest e820 table



On 2015/7/17 18:50, Jan Beulich wrote:
On 17.07.15 at 11:09, <tiejun.chen@xxxxxxxxx> wrote:
And then of course there's the question of whether "nr" is really
the right upper loop bound here: Just prior to this you added
the hypervisor supplied entries - why would you need to iterate
over them here? I.e. I'd see this better be moved ahead of that
other code.


Sounds you mean I should sync low/high memory in memory_map.map[]
beforehand and then fulfill e820 like this,

Why would you want/need to sync into memory_map.map[]?

But actually I just felt this make our process clear.

That's certainly not what I suggested.


Do you mean I should check low/high mem before we add the hypervisor supplied entries like this?

+    for ( i = nr-1; i > memory_map.nr_map; i-- )
+    {
+        uint64_t end = e820[i].addr + e820[i].size;
+
+        if ( e820[i].type == E820_RAM &&
+             low_mem_end > e820[i].addr && low_mem_end < end )
+        {
+            add_high_mem = end - low_mem_end;
+            e820[i].size = low_mem_end - e820[i].addr;
+            break;
+        }
+    }
+
+    /* And then we also need to adjust highmem. */
+    if ( add_high_mem )
+    {
+        /* Modify the existing highmem region if it exists. */
+        for ( i = nr-1 ; i > memory_map.nr_map; i-- )
+        {
+            if ( e820[i].type == E820_RAM &&
+                 e820[i].addr == ((uint64_t)1 << 32))
+            {
+                e820[i].size += add_high_mem;
+                break;
+            }
+        }
+
+        /* If there was no highmem region, just create one. */
+        if ( i == memory_map.nr_map )
+        {
+            e820[nr].addr = ((uint64_t)1 << 32);
+            e820[nr].size = add_high_mem;
+            e820[nr].type = E820_RAM;
+            i = nr;
+            nr++;
+        }
+
+        /* A sanity check if high memory is broken. */
+        BUG_ON( high_mem_end != e820[i].addr + e820[i].size);
+    }

Thanks
Tiejun






_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.