On Fri, Jun 17, 2016 at 03:20:10PM +0800, Haozhong Zhang wrote: > OS usually expects BIOS to set certain bits in MSR_IA32_FEATURE_CONTROL > for some features (e.g. VMX and LMCE). QEMU provides a fw_cfg file > "etc/msr_feature_control" to advise bits that should be set in > MSR_IA32_FEATURE_CONTROL. If this file exists, SeaBIOS will set the > advised bits in that MSR.
Thanks - see my comments below. > --- /dev/null > +++ b/src/fw/msr_feature_control.c > @@ -0,0 +1,16 @@ > +#include "util.h" // msr_feature_control_setup, wrmsr_smp > +#include "romfile.h" // romfile_find > + > +#define MSR_IA32_FEATURE_CONTROL 0x0000003a > + > +void msr_feature_control_setup(void) > +{ > + struct romfile_s *f = romfile_find("etc/msr_feature_control"); > + if (!f) > + return; > + > + u64 feature_control_bits; > + f->copy(f, &feature_control_bits, sizeof(feature_control_bits)); > + if (feature_control_bits) > + wrmsr_smp(MSR_IA32_FEATURE_CONTROL, feature_control_bits); > +} Can you use romfile_loadint() instead? Something like: u64 feature_control_bits = romfile_loadint("etc/msr_feature_control", 0); if (feature_control_bits) wrmsr_smp(MSR_IA32_FEATURE_CONTROL, feature_control_bits); That should avoid the need for the separate romfile_find() call and it has the added benefit of additional sanity checks. Also, I think this code is small enough it can be placed directly in paravirt.c and does not need its own c file. -Kevin