### hvm\_debug
> `= <integer>`
+The specified value is a bit mask with the individual bits having the
+following meaning:
+
+Bit 0 - debug level 0 (unused at present)
+Bit 1 - debug level 1 (Control Register logging)
+Bit 2 - debug level 2 (VMX logging of MSR restores when context switching)
+Bit 3 - debug level 3 (unused at present)
+Bit 4 - I/O operation logging
+Bit 5 - vMMU logging
+Bit 6 - vLAPIC general logging
+Bit 7 - vLAPIC timer logging
+Bit 8 - vLAPIC interrupt logging
+Bit 9 - vIOAPIC logging
+Bit 10 - hypercall logging
+Bit 11 - MSR operation logging
+
+Recognized in debug builds of the hypervisor only.
+
### hvm\_port80
> `= <boolean>`
+> Default: `true`
+
+Specify whether guests are to be given access to physical port 80
+(often used for debugging purposes), to override the DMI based
+detection of systems known to misbehave upon accesses to that port.
+
### highmem-start
> `= <size>`
bool_t __read_mostly hvm_enabled;
+#ifdef DBG_LEVEL_0
unsigned int opt_hvm_debug_level __read_mostly;
integer_param("hvm_debug", opt_hvm_debug_level);
+#endif
struct hvm_function_table hvm_funcs __read_mostly;
goto gpf;
}
- HVM_DBG_LOG(DBG_LEVEL_1, "returns: ecx=%x, msr_value=%"PRIx64,
+ HVM_DBG_LOG(DBG_LEVEL_MSR, "returns: ecx=%x, msr_value=%"PRIx64,
msr, *msr_content);
return X86EMUL_OKAY;
clear_bit(msr, msr_bitmap + 0xc00/BYTES_PER_LONG); /* write-high */
}
else
- HVM_DBG_LOG(DBG_LEVEL_0,
+ HVM_DBG_LOG(DBG_LEVEL_MSR,
"msr %x is out of the control range"
"0x00000000-0x00001fff and 0xc0000000-0xc0001fff"
"RDMSR or WRMSR will cause a VM exit", msr);
set_bit(msr, msr_bitmap + 0xc00/BYTES_PER_LONG); /* write-high */
}
else
- HVM_DBG_LOG(DBG_LEVEL_0,
+ HVM_DBG_LOG(DBG_LEVEL_MSR,
"msr %x is out of the control range"
"0x00000000-0x00001fff and 0xc0000000-0xc0001fff"
"RDMSR or WRMSR will cause a VM exit", msr);
return HNDL_unhandled;
}
- HVM_DBG_LOG(DBG_LEVEL_0, "msr %#x content %#"PRIx64, msr, *msr_content);
+ HVM_DBG_LOG(DBG_LEVEL_MSR, "msr %#x content %#"PRIx64, msr, *msr_content);
return HNDL_done;
}
struct vmx_msr_state *guest_msr_state = &v->arch.hvm_vmx.msr_state;
struct vmx_msr_state *host_msr_state = &this_cpu(host_msr_state);
- HVM_DBG_LOG(DBG_LEVEL_0, "msr %#x content %#"PRIx64, msr, msr_content);
+ HVM_DBG_LOG(DBG_LEVEL_MSR, "msr %#x content %#"PRIx64, msr, msr_content);
switch ( msr )
{
return HNDL_done;
uncanonical_address:
- HVM_DBG_LOG(DBG_LEVEL_0, "Not cano address of msr write %x", msr);
+ HVM_DBG_LOG(DBG_LEVEL_MSR, "Not cano address of msr write %x", msr);
hvm_inject_hw_exception(TRAP_gp_fault, 0);
return HNDL_exception_raised;
}
static int vmx_msr_read_intercept(unsigned int msr, uint64_t *msr_content)
{
- HVM_DBG_LOG(DBG_LEVEL_1, "ecx=%#x", msr);
+ HVM_DBG_LOG(DBG_LEVEL_MSR, "ecx=%#x", msr);
switch ( msr )
{
}
done:
- HVM_DBG_LOG(DBG_LEVEL_1, "returns: ecx=%#x, msr_value=%#"PRIx64,
+ HVM_DBG_LOG(DBG_LEVEL_MSR, "returns: ecx=%#x, msr_value=%#"PRIx64,
msr, *msr_content);
return X86EMUL_OKAY;
{
struct vcpu *v = current;
- HVM_DBG_LOG(DBG_LEVEL_1, "ecx=%#x, msr_value=%#"PRIx64, msr, msr_content);
+ HVM_DBG_LOG(DBG_LEVEL_MSR, "ecx=%#x, msr_value=%#"PRIx64, msr, msr_content);
switch ( msr )
{