Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 9 Aug 2024 06:16:11 GMT
From:      Corvin =?utf-8?Q?K=C3=B6hne?= <corvink@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: f325f81f4ab9 - main - bhyve: remove empty E820 entries
Message-ID:  <202408090616.4796GBKV049512@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by corvink:

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

commit f325f81f4ab93646debed0c2291c4c7f31470cfb
Author:     Corvin Köhne <corvink@FreeBSD.org>
AuthorDate: 2024-06-04 07:38:02 +0000
Commit:     Corvin Köhne <corvink@FreeBSD.org>
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202408090616.4796GBKV049512>