bhyve: pass E820 table to guest
E820 table will be used to report valid RAM ranges and reserve special memory areas like graphics memory for GPU passthrough. Reviewed by: markj MFC after: 1 week Sponsored by: Beckhoff Automation GmbH & Co. KG Differential Revision: https://reviews.freebsd.org/D39550
This commit is contained in:
parent
a8a8e9af57
commit
16f23f7543
@ -29,6 +29,7 @@ SRCS= \
|
|||||||
crc16.c \
|
crc16.c \
|
||||||
ctl_util.c \
|
ctl_util.c \
|
||||||
ctl_scsi_all.c \
|
ctl_scsi_all.c \
|
||||||
|
e820.c \
|
||||||
fwctl.c \
|
fwctl.c \
|
||||||
gdb.c \
|
gdb.c \
|
||||||
hda_codec.c \
|
hda_codec.c \
|
||||||
|
@ -91,6 +91,7 @@ __FBSDID("$FreeBSD$");
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "inout.h"
|
#include "inout.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
#include "e820.h"
|
||||||
#include "fwctl.h"
|
#include "fwctl.h"
|
||||||
#include "gdb.h"
|
#include "gdb.h"
|
||||||
#include "ioapic.h"
|
#include "ioapic.h"
|
||||||
@ -1242,6 +1243,7 @@ main(int argc, char *argv[])
|
|||||||
int max_vcpus, memflags;
|
int max_vcpus, memflags;
|
||||||
struct vcpu *bsp;
|
struct vcpu *bsp;
|
||||||
struct vmctx *ctx;
|
struct vmctx *ctx;
|
||||||
|
struct qemu_fwcfg_item *e820_fwcfg_item;
|
||||||
uint64_t rip;
|
uint64_t rip;
|
||||||
size_t memsize;
|
size_t memsize;
|
||||||
const char *optstr, *value, *vmname;
|
const char *optstr, *value, *vmname;
|
||||||
@ -1486,6 +1488,11 @@ main(int argc, char *argv[])
|
|||||||
exit(4);
|
exit(4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (e820_init(ctx) != 0) {
|
||||||
|
fprintf(stderr, "Unable to setup E820");
|
||||||
|
exit(4);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Exit if a device emulation finds an error in its initilization
|
* Exit if a device emulation finds an error in its initilization
|
||||||
*/
|
*/
|
||||||
@ -1576,6 +1583,18 @@ main(int argc, char *argv[])
|
|||||||
assert(error == 0);
|
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");
|
||||||
|
exit(4);
|
||||||
|
}
|
||||||
|
free(e820_fwcfg_item);
|
||||||
|
|
||||||
if (lpc_bootrom() && strcmp(lpc_fwcfg(), "bhyve") == 0) {
|
if (lpc_bootrom() && strcmp(lpc_fwcfg(), "bhyve") == 0) {
|
||||||
fwctl_init();
|
fwctl_init();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user