aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Johnston <markj@FreeBSD.org>2023-10-04 16:21:20 +0000
committerMark Johnston <markj@FreeBSD.org>2023-10-04 16:53:16 +0000
commit4fe5b70cae6761b9205ff35b72ccfe60d7326301 (patch)
tree92f0f0adce0bbdd57007584d2f32663ca7d43d59
parentf927afc1a6fe8257e28d79e8bb77305c2958724a (diff)
downloadsrc-4fe5b70cae6761b9205ff35b72ccfe60d7326301.tar.gz
src-4fe5b70cae6761b9205ff35b72ccfe60d7326301.zip
bhyve: Move more amd64-specific code under amd64/
mptable and the e820 are both rather amd64-specific and can be moved easily. In the case of e820, move the registration with qemu_fwcfg into e820.c, as it simplifies bhyverun.c a bit and I can't see any downsides. No functional change intended. Reviewed by: corvink, jhb, emaste MFC after: 1 week Sponsored by: Innovate UK Differential Revision: https://reviews.freebsd.org/D40552
-rw-r--r--usr.sbin/bhyve/Makefile2
-rw-r--r--usr.sbin/bhyve/amd64/Makefile.inc2
-rw-r--r--usr.sbin/bhyve/amd64/e820.c (renamed from usr.sbin/bhyve/e820.c)24
-rw-r--r--usr.sbin/bhyve/amd64/e820.h (renamed from usr.sbin/bhyve/e820.h)2
-rw-r--r--usr.sbin/bhyve/amd64/mptbl.c (renamed from usr.sbin/bhyve/mptbl.c)0
-rw-r--r--usr.sbin/bhyve/amd64/mptbl.h (renamed from usr.sbin/bhyve/mptbl.h)0
-rw-r--r--usr.sbin/bhyve/bhyverun.c30
-rw-r--r--usr.sbin/bhyve/pci_gvt-d.c2
-rw-r--r--usr.sbin/bhyve/snapshot.c1
9 files changed, 41 insertions, 22 deletions
diff --git a/usr.sbin/bhyve/Makefile b/usr.sbin/bhyve/Makefile
index 86039a8c45da..499c0d1bb89d 100644
--- a/usr.sbin/bhyve/Makefile
+++ b/usr.sbin/bhyve/Makefile
@@ -28,7 +28,6 @@ SRCS= \
crc16.c \
ctl_scsi_all.c \
ctl_util.c \
- e820.c \
gdb.c \
hda_codec.c \
inout.c \
@@ -37,7 +36,6 @@ SRCS= \
kernemu_dev.c \
mem.c \
mevent.c \
- mptbl.c \
net_backends.c \
net_utils.c \
pci_ahci.c \
diff --git a/usr.sbin/bhyve/amd64/Makefile.inc b/usr.sbin/bhyve/amd64/Makefile.inc
index c52219cb8dd1..e0cb84e32b85 100644
--- a/usr.sbin/bhyve/amd64/Makefile.inc
+++ b/usr.sbin/bhyve/amd64/Makefile.inc
@@ -1,6 +1,8 @@
SRCS+= \
atkbdc.c \
+ e820.c \
fwctl.c \
+ mptbl.c \
post.c \
ps2kbd.c \
ps2mouse.c \
diff --git a/usr.sbin/bhyve/e820.c b/usr.sbin/bhyve/amd64/e820.c
index 99a66645f70f..545878aad39f 100644
--- a/usr.sbin/bhyve/e820.c
+++ b/usr.sbin/bhyve/amd64/e820.c
@@ -105,7 +105,7 @@ e820_dump_table(void)
}
}
-struct qemu_fwcfg_item *
+static struct qemu_fwcfg_item *
e820_get_fwcfg_item(void)
{
struct qemu_fwcfg_item *fwcfg_item;
@@ -466,3 +466,25 @@ e820_init(struct vmctx *const ctx)
return (0);
}
+
+int
+e820_finalize(void)
+{
+ struct qemu_fwcfg_item *e820_fwcfg_item;
+ int error;
+
+ e820_fwcfg_item = e820_get_fwcfg_item();
+ if (e820_fwcfg_item == NULL) {
+ warnx("invalid e820 table");
+ return (ENOMEM);
+ }
+ error = qemu_fwcfg_add_file("etc/e820",
+ e820_fwcfg_item->size, e820_fwcfg_item->data);
+ if (error != 0) {
+ warnx("could not add qemu fwcfg etc/e820");
+ return (error);
+ }
+ free(e820_fwcfg_item);
+
+ return (0);
+}
diff --git a/usr.sbin/bhyve/e820.h b/usr.sbin/bhyve/amd64/e820.h
index 8703a55115cd..ae68fe9040a9 100644
--- a/usr.sbin/bhyve/e820.h
+++ b/usr.sbin/bhyve/amd64/e820.h
@@ -41,5 +41,5 @@ uint64_t e820_alloc(const uint64_t address, const uint64_t length,
const uint64_t alignment, const enum e820_memory_type type,
const enum e820_allocation_strategy strategy);
void e820_dump_table(void);
-struct qemu_fwcfg_item *e820_get_fwcfg_item(void);
int e820_init(struct vmctx *const ctx);
+int e820_finalize(void);
diff --git a/usr.sbin/bhyve/mptbl.c b/usr.sbin/bhyve/amd64/mptbl.c
index e2653ddcf37d..e2653ddcf37d 100644
--- a/usr.sbin/bhyve/mptbl.c
+++ b/usr.sbin/bhyve/amd64/mptbl.c
diff --git a/usr.sbin/bhyve/mptbl.h b/usr.sbin/bhyve/amd64/mptbl.h
index 002edb32e6cb..002edb32e6cb 100644
--- a/usr.sbin/bhyve/mptbl.h
+++ b/usr.sbin/bhyve/amd64/mptbl.h
diff --git a/usr.sbin/bhyve/bhyverun.c b/usr.sbin/bhyve/bhyverun.c
index 707e21caf506..7672c577da66 100644
--- a/usr.sbin/bhyve/bhyverun.c
+++ b/usr.sbin/bhyve/bhyverun.c
@@ -89,8 +89,8 @@
#include "config.h"
#include "inout.h"
#include "debug.h"
-#include "e820.h"
#ifdef __amd64__
+#include "amd64/e820.h"
#include "amd64/fwctl.h"
#endif
#include "gdb.h"
@@ -98,7 +98,9 @@
#include "kernemu_dev.h"
#include "mem.h"
#include "mevent.h"
-#include "mptbl.h"
+#ifdef __amd64__
+#include "amd64/mptbl.h"
+#endif
#include "pci_emul.h"
#include "pci_irq.h"
#include "pci_lpc.h"
@@ -1221,7 +1223,6 @@ main(int argc, char *argv[])
int max_vcpus, memflags;
struct vcpu *bsp;
struct vmctx *ctx;
- struct qemu_fwcfg_item *e820_fwcfg_item;
size_t memsize;
const char *optstr, *value, *vmname;
#ifdef BHYVE_SNAPSHOT
@@ -1349,9 +1350,11 @@ main(int argc, char *argv[])
case 'x':
set_config_bool("x86.x2apic", true);
break;
+#ifdef __amd64__
case 'Y':
set_config_bool("x86.mptable", false);
break;
+#endif
case 'h':
usage(0);
default:
@@ -1476,10 +1479,12 @@ main(int argc, char *argv[])
exit(4);
}
+#ifdef __amd64__
if (e820_init(ctx) != 0) {
fprintf(stderr, "Unable to setup E820");
exit(4);
}
+#endif
/*
* Exit if a device emulation finds an error in its initialization
@@ -1552,9 +1557,7 @@ main(int argc, char *argv[])
}
#endif
- /*
- * build the guest tables, MP etc.
- */
+#ifdef __amd64__
if (get_config_bool_default("x86.mptable", true)) {
error = mptable_build(ctx, guest_ncpus);
if (error) {
@@ -1562,6 +1565,7 @@ main(int argc, char *argv[])
exit(4);
}
}
+#endif
error = smbios_build(ctx);
if (error != 0)
@@ -1572,17 +1576,11 @@ main(int argc, char *argv[])
assert(error == 0);
}
- e820_fwcfg_item = e820_get_fwcfg_item();
- if (e820_fwcfg_item == NULL) {
- fprintf(stderr, "invalid e820 table");
- exit(4);
- }
- if (qemu_fwcfg_add_file("etc/e820", e820_fwcfg_item->size,
- e820_fwcfg_item->data) != 0) {
- fprintf(stderr, "could not add qemu fwcfg etc/e820");
+#ifdef __amd64__
+ error = e820_finalize();
+ if (error != 0)
exit(4);
- }
- free(e820_fwcfg_item);
+#endif
#ifdef __amd64__
if (lpc_bootrom() && strcmp(lpc_fwcfg(), "bhyve") == 0) {
diff --git a/usr.sbin/bhyve/pci_gvt-d.c b/usr.sbin/bhyve/pci_gvt-d.c
index 78fa9878358e..f64cc5984352 100644
--- a/usr.sbin/bhyve/pci_gvt-d.c
+++ b/usr.sbin/bhyve/pci_gvt-d.c
@@ -17,7 +17,7 @@
#include <string.h>
#include <unistd.h>
-#include "e820.h"
+#include "amd64/e820.h"
#include "pci_gvt-d-opregion.h"
#include "pci_passthru.h"
diff --git a/usr.sbin/bhyve/snapshot.c b/usr.sbin/bhyve/snapshot.c
index 593930c7f8a3..2daef0ef74f0 100644
--- a/usr.sbin/bhyve/snapshot.c
+++ b/usr.sbin/bhyve/snapshot.c
@@ -84,7 +84,6 @@
#include "ioapic.h"
#include "mem.h"
#include "mevent.h"
-#include "mptbl.h"
#include "pci_emul.h"
#include "pci_irq.h"
#include "pci_lpc.h"