Re: [kvm-unit-tests PATCH] x86: Remove assumptions on CR4.MCE

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Jun 25, 2019 at 12:25 PM Nadav Amit <nadav.amit@xxxxxxxxx> wrote:
>
> CR4.MCE might be set after boot. Remove the assertion that checks that
> it is clear. Change the test to toggle the bit instead of setting it.
>
> Cc: Marc Orr <marcorr@xxxxxxxxxx>
> Signed-off-by: Nadav Amit <nadav.amit@xxxxxxxxx>
> ---
>  x86/vmx_tests.c | 29 +++++++++++++++--------------
>  1 file changed, 15 insertions(+), 14 deletions(-)
>
> diff --git a/x86/vmx_tests.c b/x86/vmx_tests.c
> index b50d858..3731757 100644
> --- a/x86/vmx_tests.c
> +++ b/x86/vmx_tests.c
> @@ -7096,8 +7096,11 @@ static int write_cr4_checking(unsigned long val)
>
>  static void vmx_cr_load_test(void)
>  {
> +       unsigned long cr3, cr4, orig_cr3, orig_cr4;
>         struct cpuid _cpuid = cpuid(1);
> -       unsigned long cr4 = read_cr4(), cr3 = read_cr3();
> +
> +       orig_cr4 = read_cr4();
> +       orig_cr3 = read_cr3();
>
>         if (!(_cpuid.c & X86_FEATURE_PCID)) {
>                 report_skip("PCID not detected");
> @@ -7108,12 +7111,11 @@ static void vmx_cr_load_test(void)
>                 return;
>         }
>
> -       TEST_ASSERT(!(cr4 & (X86_CR4_PCIDE | X86_CR4_MCE)));
> -       TEST_ASSERT(!(cr3 & X86_CR3_PCID_MASK));
> +       TEST_ASSERT(!(orig_cr3 & X86_CR3_PCID_MASK));
>
>         /* Enable PCID for L1. */
> -       cr4 |= X86_CR4_PCIDE;
> -       cr3 |= 0x1;
> +       cr4 = orig_cr4 | X86_CR4_PCIDE;
> +       cr3 = orig_cr3 | 0x1;
>         TEST_ASSERT(!write_cr4_checking(cr4));
>         write_cr3(cr3);
>
> @@ -7126,17 +7128,16 @@ static void vmx_cr_load_test(void)
>          * No exception is expected.
>          *
>          * NB. KVM loads the last guest write to CR4 into CR4 read
> -        *     shadow. In order to trigger an exit to KVM, we can set a
> -        *     bit that was zero in the above CR4 write and is owned by
> -        *     KVM. We choose to set CR4.MCE, which shall have no side
> -        *     effect because normally no guest MCE (e.g., as the result
> -        *     of bad memory) would happen during this test.
> +        *     shadow. In order to trigger an exit to KVM, we can toggle a
> +        *     bit that is owned by KVM. We choose to set CR4.MCE, which shall

"set ..." doesn't make sense, right? Maybe just delete "We choose to
... during this test.".

> +        *     have no side effect because normally no guest MCE (e.g., as the
> +        *     result of bad memory) would happen during this test.
>          */
> -       TEST_ASSERT(!write_cr4_checking(cr4 | X86_CR4_MCE));
> +       TEST_ASSERT(!write_cr4_checking(cr4 ^ X86_CR4_MCE));
>
> -       /* Cleanup L1 state: disable PCID. */
> -       write_cr3(cr3 & ~X86_CR3_PCID_MASK);
> -       TEST_ASSERT(!write_cr4_checking(cr4 & ~X86_CR4_PCIDE));
> +       /* Cleanup L1 state. */
> +       write_cr3(orig_cr3);
> +       TEST_ASSERT(!write_cr4_checking(orig_cr4));
>  }
>
>  static void vmx_nm_test_guest(void)
> --
> 2.17.1
>

Reviewed-by: Marc Orr <marcorr@xxxxxxxxxx>



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux