===================================================================
@@ -67,4 +67,9 @@ FWCfgState *fw_cfg_init(uint32_t ctl_por
#endif /* NO_QEMU_PROTOS */
+struct fw_cfg_e820_reserve {
+ uint32_t addr;
+ uint32_t length;
+};
+
#endif
===================================================================
@@ -66,6 +66,7 @@
#define FW_CFG_ACPI_TABLES (FW_CFG_ARCH_LOCAL + 0)
#define FW_CFG_SMBIOS_ENTRIES (FW_CFG_ARCH_LOCAL + 1)
#define FW_CFG_IRQ0_OVERRIDE (FW_CFG_ARCH_LOCAL + 2)
+#define FW_CFG_E820_RESERVE (FW_CFG_ARCH_LOCAL + 3)
#define MAX_IDE_BUS 2
@@ -73,6 +74,7 @@ static fdctrl_t *floppy_controller;
static RTCState *rtc_state;
static PITState *pit;
static PCII440FXState *i440fx_state;
+struct fw_cfg_e820_reserve e820_reserve;
qemu_irq *ioapic_irq_hack;
@@ -475,6 +477,8 @@ static void *bochs_bios_init(void)
if (smbios_table)
fw_cfg_add_bytes(fw_cfg, FW_CFG_SMBIOS_ENTRIES,
smbios_table, smbios_len);
+ fw_cfg_add_bytes(fw_cfg, FW_CFG_E820_RESERVE, (uint8_t *)&e820_reserve,
+ sizeof(struct fw_cfg_e820_reserve));
/* allocate memory for the NUMA channel: one (64bit) word for the number
* of nodes, one word for each VCPU->node and one word for each node to
===================================================================
@@ -101,6 +101,8 @@ void kvm_arch_reset_vcpu(CPUState *env);
struct kvm_guest_debug;
struct kvm_debug_exit_arch;
+extern struct fw_cfg_e820_reserve e820_reserve;
+
struct kvm_sw_breakpoint {
target_ulong pc;
target_ulong saved_insn;
===================================================================
@@ -23,6 +23,7 @@
#include "kvm.h"
#include "hw/pc.h"
+#include "hw/fw_cfg.h"
#define MSR_IA32_TSC 0x10
@@ -37,6 +38,11 @@ int kvm_set_tss_addr(kvm_context_t kvm,
{
#ifdef KVM_CAP_SET_TSS_ADDR
int r;
+ /*
+ * Tell fw_cfg to notify the BIOS to reserve the range.
+ */
+ e820_reserve.addr = addr;
+ e820_reserve.length = 0x4000;
r = kvm_ioctl(kvm_state, KVM_CHECK_EXTENSION, KVM_CAP_SET_TSS_ADDR);
if (r > 0) {
===================================================================
@@ -25,6 +25,8 @@
#include "gdbstub.h"
#include "host-utils.h"
+extern struct fw_cfg_e820_reserve e820_reserve;
+
#ifdef KVM_UPSTREAM
//#define DEBUG_KVM
@@ -298,6 +300,11 @@ int kvm_arch_init(KVMState *s, int smp_c
* as unavaible memory. FIXME, need to ensure the e820 map deals with
* this?
*/
+ /*
+ * Tell fw_cfg to notify the BIOS to reserve the range.
+ */
+ e820_reserve.addr = 0xfffbc000;
+ e820_reserve.length = 0x4000;
return kvm_vm_ioctl(s, KVM_SET_TSS_ADDR, 0xfffbd000);
}