The branch main has been updated by corvink:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=f325f81f4ab93646debed0c2291c4c7f31470cfb

commit f325f81f4ab93646debed0c2291c4c7f31470cfb
Author:     Corvin Köhne <[email protected]>
AuthorDate: 2024-06-04 07:38:02 +0000
Commit:     Corvin Köhne <[email protected]>
CommitDate: 2024-08-09 06:15:06 +0000

    bhyve: remove empty E820 entries
    
    When reserving a block with the same size of a RAM segement, we can end up 
with
    an empty RAM segmenet. Avoid that by removing this empty segment from the 
E820
    table.
    
    Reviewed by:            jhb, markj (older version)
    MFC after:              1 week
    Sponsored by:           Beckhoff Automation GmbH & Co. KG
    Differential Revision:  https://reviews.freebsd.org/D45480
---
 usr.sbin/bhyve/amd64/e820.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/usr.sbin/bhyve/amd64/e820.c b/usr.sbin/bhyve/amd64/e820.c
index 9d95ec8ce688..148cae72ca6e 100644
--- a/usr.sbin/bhyve/amd64/e820.c
+++ b/usr.sbin/bhyve/amd64/e820.c
@@ -210,7 +210,19 @@ e820_add_entry(const uint64_t base, const uint64_t end,
            (base < element->base || end > element->end))
                return (ENOMEM);
 
-       if (base == element->base) {
+       if (base == element->base && end == element->end) {
+               /*
+                * The new entry replaces an existing one.
+                *
+                * Old table:
+                *      [ 0x1000, 0x4000] RAM           <-- element
+                * New table:
+                *      [ 0x1000, 0x4000] Reserved
+                */
+               TAILQ_INSERT_BEFORE(element, new_element, chain);
+               TAILQ_REMOVE(&e820_table, element, chain);
+               free(element);
+       } else if (base == element->base) {
                /*
                 * New element at system memory base boundary. Add new
                 * element before current and adjust the base of the old

Reply via email to