[SeaBIOS] [PATCH] fw/msr_feature_control: add support to set MSR_IA32_FEATURE_CONTROL

Haozhong Zhang haozhong.zhang at intel.com
Fri Jun 17 02:51:03 CEST 2016


On 06/16/16 14:03, Paolo Bonzini wrote:
> 
> 
> On 16/06/2016 13:49, Haozhong Zhang wrote:
> > diff --git a/src/fw/paravirt.c b/src/fw/paravirt.c
> > index 8ed4380..640ee4c 100644
> > --- a/src/fw/paravirt.c
> > +++ b/src/fw/paravirt.c
> > @@ -153,6 +153,9 @@ qemu_platform_setup(void)
> >      mtrr_setup();
> >      smp_setup();
> >  
> > +    // Initialize MSR_IA32_FEATURE_CONTROL
> > +    msr_feature_control_setup();
> > +
> >      // Create bios tables
> >      pirtable_setup();
> >      mptable_setup();
> 
> This must run before smp_setup(), because it is smp_setup() that calls
> handle_smp() on the APs.
>

I'll move it before smp_setup().

> > diff --git a/src/fw/msr_feature_control.c b/src/fw/msr_feature_control.c
> > new file mode 100644
> > index 0000000..35d4ab8
> > --- /dev/null
> > +++ b/src/fw/msr_feature_control.c
> > @@ -0,0 +1,16 @@
> > +#include "util.h" // msr_feature_control_setup
> > +#include "x86.h" // wrmsr
> > +#include "romfile.h" // romfile_find
> > +
> > +u64 feature_control_bits;
> > +
> > +void msr_feature_control_setup(void)
> > +{
> > +    struct romfile_s *f = romfile_find("etc/msr_feature_control");
> > +    if (!f)
> > +        return;
> > +
> > +    f->copy(f, &feature_control_bits, sizeof(feature_control_bits));
> > +    if (feature_control_bits)
> > +        wrmsr(MSR_IA32_FEATURE_CONTROL, feature_control_bits);
> 
> You can use wrmsr_smp and avoid the change below to handle_smp().  It
> also removes the need for the feature_control_bits global variable.
>

Good idea. I think I should also rename smp_mtrr and smp_mtrr_count to
something like smp_msr and smp_msr_count, because they will not be used
only for MTRR.

Thanks,
Haozhong



More information about the SeaBIOS mailing list